intl/icu/source/common/uset_props.cpp

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /*
     2 *******************************************************************************
     3 *
     4 *   Copyright (C) 2002-2011, International Business Machines
     5 *   Corporation and others.  All Rights Reserved.
     6 *
     7 *******************************************************************************
     8 *   file name:  uset_props.cpp
     9 *   encoding:   US-ASCII
    10 *   tab size:   8 (not used)
    11 *   indentation:4
    12 *
    13 *   created on: 2004aug30
    14 *   created by: Markus W. Scherer
    15 *
    16 *   C wrappers around UnicodeSet functions that are implemented in
    17 *   uniset_props.cpp, split off for modularization.
    18 */
    20 #include "unicode/utypes.h"
    21 #include "unicode/uobject.h"
    22 #include "unicode/uset.h"
    23 #include "unicode/uniset.h"
    24 #include "cmemory.h"
    25 #include "unicode/ustring.h"
    26 #include "unicode/parsepos.h"
    28 U_NAMESPACE_USE
    30 U_CAPI USet* U_EXPORT2
    31 uset_openPattern(const UChar* pattern, int32_t patternLength,
    32                  UErrorCode* ec)
    33 {
    34     UnicodeString pat(patternLength==-1, pattern, patternLength);
    35     UnicodeSet* set = new UnicodeSet(pat, *ec);
    36     /* test for NULL */
    37     if(set == 0) {
    38         *ec = U_MEMORY_ALLOCATION_ERROR;
    39         return 0;
    40     }
    42     if (U_FAILURE(*ec)) {
    43         delete set;
    44         set = NULL;
    45     }
    46     return (USet*) set;
    47 }
    49 U_CAPI USet* U_EXPORT2
    50 uset_openPatternOptions(const UChar* pattern, int32_t patternLength,
    51                  uint32_t options,
    52                  UErrorCode* ec)
    53 {
    54     UnicodeString pat(patternLength==-1, pattern, patternLength);
    55     UnicodeSet* set = new UnicodeSet(pat, options, NULL, *ec);
    56     /* test for NULL */
    57     if(set == 0) {
    58         *ec = U_MEMORY_ALLOCATION_ERROR;
    59         return 0;
    60     }
    62     if (U_FAILURE(*ec)) {
    63         delete set;
    64         set = NULL;
    65     }
    66     return (USet*) set;
    67 }
    70 U_CAPI int32_t U_EXPORT2 
    71 uset_applyPattern(USet *set,
    72                   const UChar *pattern, int32_t patternLength,
    73                   uint32_t options,
    74                   UErrorCode *status){
    76     // status code needs to be checked since we 
    77     // dereference it
    78     if(status == NULL || U_FAILURE(*status)){
    79         return 0;
    80     }
    82     // check only the set paramenter
    83     // if pattern is NULL or null terminate
    84     // UnicodeString constructor takes care of it
    85     if(set == NULL){
    86         *status = U_ILLEGAL_ARGUMENT_ERROR;
    87         return 0;
    88     }
    90     UnicodeString pat(pattern, patternLength);
    92     ParsePosition pos;
    94     ((UnicodeSet*) set)->applyPattern(pat, pos, options, NULL, *status);
    96     return pos.getIndex();
    97 }
    99 U_CAPI void U_EXPORT2
   100 uset_applyIntPropertyValue(USet* set,
   101                UProperty prop, int32_t value, UErrorCode* ec) {
   102     ((UnicodeSet*) set)->applyIntPropertyValue(prop, value, *ec);
   103 }
   105 U_CAPI void U_EXPORT2
   106 uset_applyPropertyAlias(USet* set,
   107                         const UChar *prop, int32_t propLength,
   108                         const UChar *value, int32_t valueLength,
   109             UErrorCode* ec) {
   111     UnicodeString p(prop, propLength);
   112     UnicodeString v(value, valueLength);
   114     ((UnicodeSet*) set)->applyPropertyAlias(p, v, *ec);
   115 }
   117 U_CAPI UBool U_EXPORT2
   118 uset_resemblesPattern(const UChar *pattern, int32_t patternLength,
   119                       int32_t pos) {
   121     UnicodeString pat(pattern, patternLength);
   123     return ((pos+1) < pat.length() &&
   124             pat.charAt(pos) == (UChar)91/*[*/) ||
   125             UnicodeSet::resemblesPattern(pat, pos);
   126 }
   128 U_CAPI int32_t U_EXPORT2
   129 uset_toPattern(const USet* set,
   130                UChar* result, int32_t resultCapacity,
   131                UBool escapeUnprintable,
   132                UErrorCode* ec) {
   133     UnicodeString pat;
   134     ((const UnicodeSet*) set)->toPattern(pat, escapeUnprintable);
   135     return pat.extract(result, resultCapacity, *ec);
   136 }
   138 U_CAPI void U_EXPORT2
   139 uset_closeOver(USet* set, int32_t attributes) {
   140     ((UnicodeSet*) set)->UnicodeSet::closeOver(attributes);
   141 }

mercurial