Home | History | Annotate | Download | only in unicode
      1 /*
      2 *******************************************************************************
      3 *   Copyright (C) 2010-2012, International Business Machines
      4 *   Corporation and others.  All Rights Reserved.
      5 *******************************************************************************
      6 *   file name:  udicttrie.h
      7 *   encoding:   US-ASCII
      8 *   tab size:   8 (not used)
      9 *   indentation:4
     10 *
     11 *   created on: 2010dec17
     12 *   created by: Markus W. Scherer
     13 */
     14 
     15 #ifndef __USTRINGTRIE_H__
     16 #define __USTRINGTRIE_H__
     17 
     18 /**
     19  * \file
     20  * \brief C API: Helper definitions for dictionary trie APIs.
     21  */
     22 
     23 #include "unicode/utypes.h"
     24 
     25 
     26 /**
     27  * Return values for BytesTrie::next(), UCharsTrie::next() and similar methods.
     28  * @see USTRINGTRIE_MATCHES
     29  * @see USTRINGTRIE_HAS_VALUE
     30  * @see USTRINGTRIE_HAS_NEXT
     31  * @stable ICU 4.8
     32  */
     33 enum UStringTrieResult {
     34     /**
     35      * The input unit(s) did not continue a matching string.
     36      * Once current()/next() return USTRINGTRIE_NO_MATCH,
     37      * all further calls to current()/next() will also return USTRINGTRIE_NO_MATCH,
     38      * until the trie is reset to its original state or to a saved state.
     39      * @stable ICU 4.8
     40      */
     41     USTRINGTRIE_NO_MATCH,
     42     /**
     43      * The input unit(s) continued a matching string
     44      * but there is no value for the string so far.
     45      * (It is a prefix of a longer string.)
     46      * @stable ICU 4.8
     47      */
     48     USTRINGTRIE_NO_VALUE,
     49     /**
     50      * The input unit(s) continued a matching string
     51      * and there is a value for the string so far.
     52      * This value will be returned by getValue().
     53      * No further input byte/unit can continue a matching string.
     54      * @stable ICU 4.8
     55      */
     56     USTRINGTRIE_FINAL_VALUE,
     57     /**
     58      * The input unit(s) continued a matching string
     59      * and there is a value for the string so far.
     60      * This value will be returned by getValue().
     61      * Another input byte/unit can continue a matching string.
     62      * @stable ICU 4.8
     63      */
     64     USTRINGTRIE_INTERMEDIATE_VALUE
     65 };
     66 
     67 /**
     68  * Same as (result!=USTRINGTRIE_NO_MATCH).
     69  * @param result A result from BytesTrie::first(), UCharsTrie::next() etc.
     70  * @return true if the input bytes/units so far are part of a matching string/byte sequence.
     71  * @stable ICU 4.8
     72  */
     73 #define USTRINGTRIE_MATCHES(result) ((result)!=USTRINGTRIE_NO_MATCH)
     74 
     75 /**
     76  * Equivalent to (result==USTRINGTRIE_INTERMEDIATE_VALUE || result==USTRINGTRIE_FINAL_VALUE) but
     77  * this macro evaluates result exactly once.
     78  * @param result A result from BytesTrie::first(), UCharsTrie::next() etc.
     79  * @return true if there is a value for the input bytes/units so far.
     80  * @see BytesTrie::getValue
     81  * @see UCharsTrie::getValue
     82  * @stable ICU 4.8
     83  */
     84 #define USTRINGTRIE_HAS_VALUE(result) ((result)>=USTRINGTRIE_FINAL_VALUE)
     85 
     86 /**
     87  * Equivalent to (result==USTRINGTRIE_NO_VALUE || result==USTRINGTRIE_INTERMEDIATE_VALUE) but
     88  * this macro evaluates result exactly once.
     89  * @param result A result from BytesTrie::first(), UCharsTrie::next() etc.
     90  * @return true if another input byte/unit can continue a matching string.
     91  * @stable ICU 4.8
     92  */
     93 #define USTRINGTRIE_HAS_NEXT(result) ((result)&1)
     94 
     95 #endif  /* __USTRINGTRIE_H__ */
     96