/*
*****************************************************************************************
*                                                                                       *
* COPYRIGHT:                                                                            *
*   (C) Copyright Taligent, Inc.,  1997                                                 *
*   (C) Copyright International Business Machines Corporation,  1997-1999                    *
*   Licensed Material - Program-Property of IBM - All Rights Reserved.                  *
*   US Government Users Restricted Rights - Use, duplication, or disclosure             *
*   restricted by GSA ADP Schedule Contract with IBM Corp.                              *
*                                                                                       *
*****************************************************************************************
*
* File UNICDCM.H
*
* UnicodeClassMapping maps characters to state change inputs for WordBreakTable.
*
* @package  Text and International
* @category Text Scanning
*
* Modification History:
*
*   Date        Name        Description
*   02/18/97    aliu        Converted from OpenClass.
*   05/06/97    aliu        Made SpecialMapping an array of objects instead of pointers,
*                           to help out non-compliant compilers.
*****************************************************************************************
*/

#ifndef UNICDCM_H
#define UNICDCM_H

#include "spclmap.h"
#include "unicode.h"

/**
 * This class maps characters to state change inputs for
 * WordBreakTable.  If the character appears in the exception list,
 * the mapping there is retuned, otherwise the mapping returned by
 * IUnicode::type is returned.
 *
 * Note in this implementation characters from 0x0040 to 0x009f always use the
 * mapping returned by IUnicode::type and never the exception list.
 */
class UnicodeClassMapping {
public:
    // For convenience
    typedef TextBoundaryData::Type Type;

    /**
     * Create a mapping given a mapping from categories and a list
     * of exceptions.  Both the mapping list and exceptionChars list must
     * be sorted in ascending order.
     */
    UnicodeClassMapping(Type* mappedValue, 
            int32_t mappedValue_length,
                        const SpecialMapping* exceptionChars, 
            int32_t exceptionChars_length,
                        const bool_t* hasException,
                        Type* asiiValues );
    
    /**
     * Map a character to a state change input for WordBreakTable.
     * @param ch the character to map.
     * @return the mapped value.
     */
    Type mappedChar(UChar ch) const;

private:
    const bool_t            *fHasException;
    const Type*             fMappedValue;
    const int32_t           fMappedValue_length;
    const SpecialMapping*   fExceptionChars;
    const int32_t           fExceptionChars_length;
    const Type*             fAsciiValues;
};

#endif // _UNICDCM
//eof
