123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // © 2016 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- /*
- ******************************************************************************
- *
- * Copyright (C) 1999-2011, International Business Machines
- * Corporation and others. All Rights Reserved.
- *
- ******************************************************************************/
- /*----------------------------------------------------------------------------------
- *
- * UCommonData An abstract interface for dealing with ICU Common Data Files.
- * ICU Common Data Files are a grouping of a number of individual
- * data items (resources, converters, tables, anything) into a
- * single file or dll. The combined format includes a table of
- * contents for locating the individual items by name.
- *
- * Two formats for the table of contents are supported, which is
- * why there is an abstract inteface involved.
- *
- * These functions are part of the ICU internal implementation, and
- * are not inteded to be used directly by applications.
- */
- #ifndef __UCMNDATA_H__
- #define __UCMNDATA_H__
- #include "unicode/udata.h"
- #include "umapfile.h"
- #define COMMON_DATA_NAME U_ICUDATA_NAME
- typedef struct {
- uint16_t headerSize;
- uint8_t magic1;
- uint8_t magic2;
- } MappedData;
- typedef struct {
- MappedData dataHeader;
- UDataInfo info;
- } DataHeader;
- typedef struct {
- DataHeader hdr;
- char padding[8];
- uint32_t count, reserved;
- /*
- const struct {
- const char *const name;
- const void *const data;
- } toc[1];
- */
- int fakeNameAndData[4]; /* TODO: Change this header type from */
- /* pointerTOC to OffsetTOC. */
- } ICU_Data_Header;
- typedef struct {
- uint32_t nameOffset;
- uint32_t dataOffset;
- } UDataOffsetTOCEntry;
- typedef struct {
- uint32_t count;
- /**
- * Variable-length array declared with length 1 to disable bounds checkers.
- * The actual array length is in the count field.
- */
- UDataOffsetTOCEntry entry[1];
- } UDataOffsetTOC;
- /**
- * Get the header size from a const DataHeader *udh.
- * Handles opposite-endian data.
- *
- * @internal
- */
- U_CFUNC uint16_t
- udata_getHeaderSize(const DataHeader *udh);
- /**
- * Get the UDataInfo.size from a const UDataInfo *info.
- * Handles opposite-endian data.
- *
- * @internal
- */
- U_CFUNC uint16_t
- udata_getInfoSize(const UDataInfo *info);
- U_CDECL_BEGIN
- /*
- * "Virtual" functions for data lookup.
- * To call one, given a UDataMemory *p, the code looks like this:
- * p->vFuncs.Lookup(p, tocEntryName, pErrorCode);
- * (I sure do wish this was written in C++, not C)
- */
- typedef const DataHeader *
- (U_CALLCONV * LookupFn)(const UDataMemory *pData,
- const char *tocEntryName,
- int32_t *pLength,
- UErrorCode *pErrorCode);
- typedef uint32_t
- (U_CALLCONV * NumEntriesFn)(const UDataMemory *pData);
- U_CDECL_END
- typedef struct {
- LookupFn Lookup;
- NumEntriesFn NumEntries;
- } commonDataFuncs;
- /*
- * Functions to check whether a UDataMemory refers to memory containing
- * a recognizable header and table of contents a Common Data Format
- *
- * If a valid header and TOC are found,
- * set the CommonDataFuncs function dispatch vector in the UDataMemory
- * to point to the right functions for the TOC type.
- * otherwise
- * set an errorcode.
- */
- U_CFUNC void udata_checkCommonData(UDataMemory *pData, UErrorCode *pErrorCode);
- #endif
|