/*
*******************************************************************************
* Copyright (C) 2006-2008, 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).
     */
    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().
     */
    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)
     */
    static final byte OPTION_SEP_CHAR  = ',';

    /** Maximum length of a converter name including the terminating NULL */
    static final int MAX_CONVERTER_NAME_LENGTH  = 60;
    /** Maximum length of a converter name including path and terminating NULL */
    static final int MAX_FULL_FILE_NAME_LENGTH = (600+MAX_CONVERTER_NAME_LENGTH);

    /** Shift in for EBDCDIC_STATEFUL and iso2022 states */
    static final int SI = 0x0F;
    /** Shift out for EBDCDIC_STATEFUL and iso2022 states */
    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
      */
    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).
     */
    static final int U16_MAX_LENGTH = 2;
    // end utf16.h

    // begin err.h
    /**
     * FROM_U, TO_U context options for sub callback
     */
    static byte[] SUB_STOP_ON_ILLEGAL = {'i'};

    /**
     * FROM_U, TO_U context options for skip callback
     */
    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.
     */
    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.
                               */
    }
    //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;
}
