2001-09-07 18:42:29 +00:00
|
|
|
/*
|
|
|
|
******************************************************************************
|
|
|
|
*
|
2010-05-21 04:39:19 +00:00
|
|
|
* Copyright (C) 1999-2010, International Business Machines
|
2001-09-07 18:42:29 +00:00
|
|
|
* Corporation and others. All Rights Reserved.
|
|
|
|
*
|
2001-09-25 16:43:20 +00:00
|
|
|
******************************************************************************/
|
2001-09-07 18:42:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* 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;
|
|
|
|
|
2003-09-18 21:35:48 +00:00
|
|
|
typedef struct {
|
|
|
|
uint32_t nameOffset;
|
|
|
|
uint32_t dataOffset;
|
|
|
|
} UDataOffsetTOCEntry;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
uint32_t count;
|
2003-11-21 18:35:16 +00:00
|
|
|
UDataOffsetTOCEntry entry[2]; /* Actual size of array is from count. */
|
2003-09-18 21:35:48 +00:00
|
|
|
} UDataOffsetTOC;
|
|
|
|
|
2003-11-21 18:35:16 +00:00
|
|
|
/**
|
|
|
|
* 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);
|
2001-09-07 18:42:29 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* "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 *
|
|
|
|
(* LookupFn)(const UDataMemory *pData,
|
|
|
|
const char *tocEntryName,
|
2003-11-19 01:04:19 +00:00
|
|
|
int32_t *pLength,
|
2001-09-07 18:42:29 +00:00
|
|
|
UErrorCode *pErrorCode);
|
|
|
|
|
|
|
|
typedef uint32_t
|
|
|
|
(* NumEntriesFn)(const UDataMemory *pData);
|
|
|
|
|
|
|
|
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.
|
|
|
|
*/
|
2010-05-21 04:39:19 +00:00
|
|
|
U_CFUNC void udata_checkCommonData(UDataMemory *pData, UErrorCode *pErrorCode);
|
2001-09-07 18:42:29 +00:00
|
|
|
|
|
|
|
#endif
|