16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2010-2012, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: udicttrie.h 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created on: 2010dec17 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created by: Markus W. Scherer 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __USTRINGTRIE_H__ 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __USTRINGTRIE_H__ 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: Helper definitions for dictionary trie APIs. 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return values for BytesTrie::next(), UCharsTrie::next() and similar methods. 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see USTRINGTRIE_MATCHES 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see USTRINGTRIE_HAS_VALUE 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see USTRINGTRIE_HAS_NEXT 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum UStringTrieResult { 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The input unit(s) did not continue a matching string. 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Once current()/next() return USTRINGTRIE_NO_MATCH, 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * all further calls to current()/next() will also return USTRINGTRIE_NO_MATCH, 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * until the trie is reset to its original state or to a saved state. 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USTRINGTRIE_NO_MATCH, 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The input unit(s) continued a matching string 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * but there is no value for the string so far. 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (It is a prefix of a longer string.) 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USTRINGTRIE_NO_VALUE, 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The input unit(s) continued a matching string 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and there is a value for the string so far. 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This value will be returned by getValue(). 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * No further input byte/unit can continue a matching string. 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USTRINGTRIE_FINAL_VALUE, 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The input unit(s) continued a matching string 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and there is a value for the string so far. 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This value will be returned by getValue(). 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Another input byte/unit can continue a matching string. 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USTRINGTRIE_INTERMEDIATE_VALUE 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Same as (result!=USTRINGTRIE_NO_MATCH). 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A result from BytesTrie::first(), UCharsTrie::next() etc. 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return true if the input bytes/units so far are part of a matching string/byte sequence. 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define USTRINGTRIE_MATCHES(result) ((result)!=USTRINGTRIE_NO_MATCH) 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Equivalent to (result==USTRINGTRIE_INTERMEDIATE_VALUE || result==USTRINGTRIE_FINAL_VALUE) but 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this macro evaluates result exactly once. 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A result from BytesTrie::first(), UCharsTrie::next() etc. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return true if there is a value for the input bytes/units so far. 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see BytesTrie::getValue 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UCharsTrie::getValue 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define USTRINGTRIE_HAS_VALUE(result) ((result)>=USTRINGTRIE_FINAL_VALUE) 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Equivalent to (result==USTRINGTRIE_NO_VALUE || result==USTRINGTRIE_INTERMEDIATE_VALUE) but 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * this macro evaluates result exactly once. 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A result from BytesTrie::first(), UCharsTrie::next() etc. 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return true if another input byte/unit can continue a matching string. 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define USTRINGTRIE_HAS_NEXT(result) ((result)&1) 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* __USTRINGTRIE_H__ */ 96