16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Copyright (c) 2000 IBM, Inc. and Others.
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   FLAGCB.H - interface to 'flagging' callback which
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   simply marks the fact that the callback was called.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef _FLAGCB
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _FLAGCB
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucnv.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* The structure of a FromU Flag context.
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   (conceivably there could be a ToU Flag Context) */
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UConverterFromUCallback  subCallback;
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const void               *subContext;
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool                    flag;
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} FromUFLAGContext;
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * open the context
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI FromUFLAGContext* U_EXPORT2  flagCB_fromU_openContext();
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the actual callback
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 flagCB_fromU(
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  const void *context,
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  UConverterFromUnicodeArgs *fromUArgs,
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  const UChar* codeUnits,
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  int32_t length,
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  UChar32 codePoint,
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  UConverterCallbackReason reason,
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org				  UErrorCode * err);
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UConverterFromUCallback  subCallback;
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const void               *subContext;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uint32_t       magic;      /* 0xC0FFEE to identify that the object is OK */
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uint32_t       serial;     /* minted from nextSerial */
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} debugCBContext;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void debugCB_fromU(const void *context,
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UConverterFromUnicodeArgs *fromUArgs,
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   const UChar* codeUnits,
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   int32_t length,
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UChar32 codePoint,
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UConverterCallbackReason reason,
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UErrorCode * err);
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI debugCBContext *debugCB_openContext();
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
61