/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/


#ifndef __com_sun_star_script_Converter_idl__
#define __com_sun_star_script_Converter_idl__

#ifndef __com_sun_star_script_XTypeConverter_idl__
#include <com/sun/star/script/XTypeConverter.idl>
#endif


//=============================================================================

 module com {  module sun {  module star {  module script {

//=============================================================================

/** This service provides a widening converter converting from one type to another,
    if possible.

	<p>What is possible?
    <ul>
	<li>byte: byte, (short *1), (long *1), (hyper *1), (float *1), (double *1), (enum *2), (any *3), boolean, (char *4), (string *5)</li>
	<li>short: byte, short, (long *1), (hyper *1), (float *7), (double *7), (enum *2), (any *3), boolean, char, (string *5)</li>
	<li>long: byte, short, long, (hyper *1), (float *7), (double *7), enum, (any *3), boolean, char, (string *5)</li>
	<li>hyper: byte, short, long, hyper, (float *7), (double *7), enum, (any *3), boolean, char, (string *5)</li>
	<li>float: byte, short, long, hyper, float, (double *7), (enum *8), (any *3), boolean, char, (string *5)</li>
	<li>double: byte, short, long, hyper, float, double, enum, (any *3), boolean, char, (string *5)</li>
	<li>enum: (byte *9), (short *9), (long *9), (hyper *9), (float *9), (double *9), (enum *10), (any *3), (string *11)</li>
	<li>void: ok for all types</li>
	<li>any: ok for all types</li>
	<li>boolean: byte, short, long, hyper, float, double, (any *3), boolean, char, (string *12). 0 => false, != 0 => true</li>
	<li>char: byte, short, (long *1), (hyper *1), (float *7), (double *7), enum, (any *3), boolean, char, (string *13)</li>
	<li>string: byte, short, long, hyper, float, double, enum, (any *3), boolean, char, string</li>
	<li>struct: (any *3), (struct *14)</li>
	<li>interface: (any *3), (struct *14)</li>
	<li>exception: (any *3), (exception *14)</li>
	<li>union: (any *3), (union *14)</li>
	<li>sequence: (any *3), (sequence *15)</li>
	</ul>
    rules:
    <ul>
	<li>1: only converts if the value is in the range of the target type.</li>
	<li>2: only converts if the value, not the position, of the enum is in the range of the target type.</li>
	<li>3: get value until it is not an any. Then convert it with the other rules.</li>
	<li>4: only converts if the value of the character is between 0 - 255.</li>
	<li>5: only converts if the value represents a decimal, hexadecimal (0x...) or a floating point number.
	Examples: 10, 0x10, 10.045, 10,555, +10, +10.6e10, -10.6e-10, .16.</li>
	<li>7: only converts if the value is in the range of the target type.
	The value is rounded to an integer.</li>
	<li>8: only converts if the float can be converted back to the same enum value.</li>
	<li>9: only converts if the number is one of the enumeration type values. Normally you need
	reflection information of the enum type.</li>
	<li>10: only converts if it is the same enumeration type.</li>
	<li>11: only converts if the string contains the name of an enumeration type value. Normally you need
	core reflection information of the enum type.</li>
	<li>12: only converts if the value of the string is "1", "true" or "0", "false". The comparison
	is case insensitive.</li>
	<li>13: only converts if the length of the string is 1 or 0.</li>
	<li>14: only converts if the types are equal or the source type is derived from the destination
	type.</li>
	<li>15: only converts if each element of the source sequence can be converted to an element
	of the destination sequence.</li>
    </ul>
*/
published service Converter
{
    /** Conversion interface.
    */
	interface com::sun::star::script::XTypeConverter;

};

//=============================================================================

}; }; }; };

/*=============================================================================

=============================================================================*/
#endif
