fontservices/textshaperplugin/IcuSource/common/ucmndata.h
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fontservices/textshaperplugin/IcuSource/common/ucmndata.h	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,109 @@
+/*
+******************************************************************************
+*
+*   Copyright (C) 1999-2003, 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 {
+    uint32_t nameOffset;
+    uint32_t dataOffset;
+} UDataOffsetTOCEntry;
+
+typedef struct {
+    uint32_t count;
+    UDataOffsetTOCEntry entry[2];    /* Actual size of array is from count. */
+} 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);
+
+/*
+ *  "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,
+             int32_t *pLength,
+             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.
+ */
+void   udata_checkCommonData(UDataMemory *pData, UErrorCode *pErrorCode);
+
+
+#endif