/**
*******************************************************************************
* Copyright (C) 2006, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
*
*******************************************************************************
*/ 
package com.ibm.icu.charset;

interface UConverterConstants {

    static final short UNSIGNED_BYTE_MASK = 0xff;
    static final int UNSIGNED_SHORT_MASK = 0xffff;
    static final long UNSIGNED_INT_MASK = 0xffffffffL;
    
    static final int U_IS_BIG_ENDIAN = 0;
	
	/**
	 * Useful constant for the maximum size of the whole locale ID
	 * (including the terminating NULL).
	 * @draft ICU 3.6
	 */
	static final int ULOC_FULLNAME_CAPACITY = 56;
	
	/**
	 * This value is intended for sentinel values for APIs that
	 * (take or) return single code points (UChar32).
	 * It is outside of the Unicode code point range 0..0x10ffff.
	 * 
	 * For example, a "done" or "error" value in a new API
	 * could be indicated with U_SENTINEL.
	 *
	 * ICU APIs designed before ICU 2.4 usually define service-specific "done"
	 * values, mostly 0xffff.
	 * Those may need to be distinguished from
	 * actual U+ffff text contents by calling functions like
	 * CharacterIterator::hasNext() or UnicodeString::length().
	 * @draft ICU 2.4
	 */
	static final int U_SENTINEL = -1;
	
	//end utf.h
	
	//begin ucnv.h	
	/**
	 * Character that separates converter names from options and options from each other.
	 * @see CharsetICU#forNameICU(String)
	 * @draft ICU 3.6
	 */
	static final byte OPTION_SEP_CHAR  = ',';
	
	/** Maximum length of a converter name including the terminating NULL @draft ICU 3.6 */
	static final int MAX_CONVERTER_NAME_LENGTH  = 60;
	/** Maximum length of a converter name including path and terminating NULL @draft ICU 3.6 */
	static final int MAX_FULL_FILE_NAME_LENGTH = (600+MAX_CONVERTER_NAME_LENGTH);
	
	/** Shift in for EBDCDIC_STATEFUL and iso2022 states @draft ICU 3.6 */
	static final int SI = 0x0F;
	/** Shift out for EBDCDIC_STATEFUL and iso2022 states @draft ICU 3.6 */
	static final int SO = 0x0E;
	
	//end ucnv.h
	
	// begin bld.h
	/* size of the overflow buffers in UConverter, enough for escaping callbacks */
	//#define ERROR_BUFFER_LENGTH 32
	static final int ERROR_BUFFER_LENGTH = 32;
	
	/* at most 4 bytes per substitution character (part of .cnv file format! see UConverterStaticData) */
	static final int MAX_SUBCHAR_LEN = 4;
	
	/* at most 8 bytes per character in toUBytes[] (UTF-8 uses up to 6) */
	static final int MAX_CHAR_LEN = 8;
	
	/* converter options bits */
	static final int OPTION_VERSION     = 0xf;
	static final int OPTION_SWAP_LFNL   = 0x10;
	static final int OPTION_MAC   = 0x20; //agljport:comment added for Mac ISCII encodings
	
	/** values for the unicodeMask */
	static final int HAS_SUPPLEMENTARY = 1;
	static final int HAS_SURROGATES =   2;
	// end bld.h
	
	// begin cnv.h
	/* this is used in fromUnicode DBCS tables as an "unassigned" marker */
	static final int missingCharMarker = 0xFFFF;
	 /**
      * 
      * @author ram
      * @draft ICU 3.6
      * @provisional This API might change or be removed in a future release.
	  */
	static interface UConverterResetChoice {
	    static final int RESET_BOTH = 0;
	    static final int RESET_TO_UNICODE = RESET_BOTH + 1;
	    static final int RESET_FROM_UNICODE = RESET_TO_UNICODE + 1;
	}
	
	// begin utf16.h
	/**
	 * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff).
	 * @draft ICU 2.4
	 */
	static final int U16_MAX_LENGTH = 2;
	// end utf16.h	
	
	// begin err.h	
	/**
	 * FROM_U, TO_U context options for sub callback
	 * @draft ICU 3.6
	 */
	static byte[] SUB_STOP_ON_ILLEGAL = {'i'};
	
	/**
	 * FROM_U, TO_U context options for skip callback
	 * @draft ICU 3.6
	 */
	static byte[] SKIP_STOP_ON_ILLEGAL = {'i'};	
	
	/** 
	 * The process condition code to be used with the callbacks.  
	 * Codes which are greater than IRREGULAR should be 
	 * passed on to any chained callbacks.
	 * @draft ICU 3.6
     * @provisional This API might change or be removed in a future release.
	 */
	static interface UConverterCallbackReason {
		 static final int UNASSIGNED = 0;  /**< The code point is unassigned.
	                             The error code U_INVALID_CHAR_FOUND will be set. */
		 static final int ILLEGAL = 1;     /**< The code point is illegal. For example, 
	                             \\x81\\x2E is illegal in SJIS because \\x2E
	                             is not a valid trail byte for the \\x81 
	                             lead byte.
	                             Also, starting with Unicode 3.0.1, non-shortest byte sequences
	                             in UTF-8 (like \\xC1\\xA1 instead of \\x61 for U+0061)
	                             are also illegal, not just irregular.
	                             The error code U_ILLEGAL_CHAR_FOUND will be set. */
		 static final int IRREGULAR = 2;   /**< The codepoint is not a regular sequence in 
	                             the encoding. For example, \\xED\\xA0\\x80..\\xED\\xBF\\xBF
	                             are irregular UTF-8 byte sequences for single surrogate
	                             code points.
	                             The error code U_INVALID_CHAR_FOUND will be set. */
		 static final int RESET = 3;       /**< The callback is called with this reason when a
	                             'reset' has occured. Callback should reset all
	                             state. */
		 static final int CLOSE = 4;        /**< Called when the converter is closed. The
	                             callback should release any allocated memory.*/
		 static final int CLONE = 5;         /**< Called when safeClone() is called on the
	                              converter. the pointer available as the
	                              'context' is an alias to the original converters'
	                              context pointer. If the context must be owned
	                              by the new converter, the callback must clone 
	                              the data and call setFromUCallback 
	                              (or setToUCallback) with the correct pointer.
	                              @draft ICU 2.2
	                           */
	}
	//end err.h
    
    
    static final String DATA_TYPE = "cnv";
    static final int CNV_DATA_BUFFER_SIZE = 25000;
    static final int SIZE_OF_UCONVERTER_SHARED_DATA = 100;

    static final int MAXIMUM_UCS2 =            0x0000FFFF;
    static final int MAXIMUM_UTF =             0x0010FFFF;
    static final int MAXIMUM_UCS4 =            0x7FFFFFFF;
    static final int HALF_SHIFT =              10;
    static final int HALF_BASE =               0x0010000;
    static final int HALF_MASK =               0x3FF;
    static final int SURROGATE_HIGH_START =    0xD800;
    static final int SURROGATE_HIGH_END =      0xDBFF;
    static final int SURROGATE_LOW_START =     0xDC00;
    static final int SURROGATE_LOW_END =       0xDFFF;
    
    /* -SURROGATE_LOW_START + HALF_BASE */
    static final int SURROGATE_LOW_BASE =      9216;
}
