fontservices/textshaperplugin/IcuSource/common/ucmndata.h
changeset 0 1fb32624e06b
equal deleted inserted replaced
-1:000000000000 0:1fb32624e06b
       
     1 /*
       
     2 ******************************************************************************
       
     3 *
       
     4 *   Copyright (C) 1999-2003, International Business Machines
       
     5 *   Corporation and others.  All Rights Reserved.
       
     6 *
       
     7 ******************************************************************************/
       
     8 
       
     9 
       
    10 /*----------------------------------------------------------------------------------
       
    11  *
       
    12  *   UCommonData   An abstract interface for dealing with ICU Common Data Files.
       
    13  *                 ICU Common Data Files are a grouping of a number of individual
       
    14  *                 data items (resources, converters, tables, anything) into a
       
    15  *                 single file or dll.  The combined format includes a table of
       
    16  *                 contents for locating the individual items by name.
       
    17  *
       
    18  *                 Two formats for the table of contents are supported, which is
       
    19  *                 why there is an abstract inteface involved.
       
    20  *
       
    21  *                 These functions are part of the ICU internal implementation, and
       
    22  *                 are not inteded to be used directly by applications.
       
    23  */
       
    24 
       
    25 #ifndef __UCMNDATA_H__
       
    26 #define __UCMNDATA_H__
       
    27 
       
    28 #include "unicode/udata.h"
       
    29 #include "umapfile.h"
       
    30 
       
    31 
       
    32 #define COMMON_DATA_NAME U_ICUDATA_NAME
       
    33 
       
    34 typedef struct  {
       
    35     uint16_t    headerSize;
       
    36     uint8_t     magic1;
       
    37     uint8_t     magic2;
       
    38 } MappedData;
       
    39 
       
    40 
       
    41 typedef struct  {
       
    42     MappedData  dataHeader;
       
    43     UDataInfo   info;
       
    44 } DataHeader;
       
    45 
       
    46 typedef struct {
       
    47     uint32_t nameOffset;
       
    48     uint32_t dataOffset;
       
    49 } UDataOffsetTOCEntry;
       
    50 
       
    51 typedef struct {
       
    52     uint32_t count;
       
    53     UDataOffsetTOCEntry entry[2];    /* Actual size of array is from count. */
       
    54 } UDataOffsetTOC;
       
    55 
       
    56 /**
       
    57  * Get the header size from a const DataHeader *udh.
       
    58  * Handles opposite-endian data.
       
    59  *
       
    60  * @internal
       
    61  */
       
    62 U_CFUNC uint16_t
       
    63 udata_getHeaderSize(const DataHeader *udh);
       
    64 
       
    65 /**
       
    66  * Get the UDataInfo.size from a const UDataInfo *info.
       
    67  * Handles opposite-endian data.
       
    68  *
       
    69  * @internal
       
    70  */
       
    71 U_CFUNC uint16_t
       
    72 udata_getInfoSize(const UDataInfo *info);
       
    73 
       
    74 /*
       
    75  *  "Virtual" functions for data lookup.
       
    76  *  To call one, given a UDataMemory *p, the code looks like this:
       
    77  *     p->vFuncs.Lookup(p, tocEntryName, pErrorCode);
       
    78  *          (I sure do wish this was written in C++, not C)
       
    79  */
       
    80 
       
    81 typedef const DataHeader *
       
    82 (* LookupFn)(const UDataMemory *pData,
       
    83              const char *tocEntryName,
       
    84              int32_t *pLength,
       
    85              UErrorCode *pErrorCode);
       
    86 
       
    87 typedef uint32_t
       
    88 (* NumEntriesFn)(const UDataMemory *pData);
       
    89 
       
    90 typedef struct {
       
    91     LookupFn      Lookup;
       
    92     NumEntriesFn  NumEntries; 
       
    93 } commonDataFuncs;
       
    94 
       
    95 
       
    96 /*
       
    97  *  Functions to check whether a UDataMemory refers to memory containing 
       
    98  *     a recognizable header and table of contents a Common Data Format
       
    99  *
       
   100  *     If a valid header and TOC are found,
       
   101  *         set the CommonDataFuncs function dispatch vector in the UDataMemory
       
   102  *             to point to the right functions for the TOC type.
       
   103  *     otherwise
       
   104  *         set an errorcode.
       
   105  */
       
   106 void   udata_checkCommonData(UDataMemory *pData, UErrorCode *pErrorCode);
       
   107 
       
   108 
       
   109 #endif