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*/ 19 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" 27 28U_NAMESPACE_USE 29 30U_CAPI USet* U_EXPORT2 31uset_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 } 41 42 if (U_FAILURE(*ec)) { 43 delete set; 44 set = NULL; 45 } 46 return (USet*) set; 47} 48 49U_CAPI USet* U_EXPORT2 50uset_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 } 61 62 if (U_FAILURE(*ec)) { 63 delete set; 64 set = NULL; 65 } 66 return (USet*) set; 67} 68 69 70U_CAPI int32_t U_EXPORT2 71uset_applyPattern(USet *set, 72 const UChar *pattern, int32_t patternLength, 73 uint32_t options, 74 UErrorCode *status){ 75 76 // status code needs to be checked since we 77 // dereference it 78 if(status == NULL || U_FAILURE(*status)){ 79 return 0; 80 } 81 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 } 89 90 UnicodeString pat(pattern, patternLength); 91 92 ParsePosition pos; 93 94 ((UnicodeSet*) set)->applyPattern(pat, pos, options, NULL, *status); 95 96 return pos.getIndex(); 97} 98 99U_CAPI void U_EXPORT2 100uset_applyIntPropertyValue(USet* set, 101 UProperty prop, int32_t value, UErrorCode* ec) { 102 ((UnicodeSet*) set)->applyIntPropertyValue(prop, value, *ec); 103} 104 105U_CAPI void U_EXPORT2 106uset_applyPropertyAlias(USet* set, 107 const UChar *prop, int32_t propLength, 108 const UChar *value, int32_t valueLength, 109 UErrorCode* ec) { 110 111 UnicodeString p(prop, propLength); 112 UnicodeString v(value, valueLength); 113 114 ((UnicodeSet*) set)->applyPropertyAlias(p, v, *ec); 115} 116 117U_CAPI UBool U_EXPORT2 118uset_resemblesPattern(const UChar *pattern, int32_t patternLength, 119 int32_t pos) { 120 121 UnicodeString pat(pattern, patternLength); 122 123 return ((pos+1) < pat.length() && 124 pat.charAt(pos) == (UChar)91/*[*/) || 125 UnicodeSet::resemblesPattern(pat, pos); 126} 127 128U_CAPI int32_t U_EXPORT2 129uset_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} 137 138U_CAPI void U_EXPORT2 139uset_closeOver(USet* set, int32_t attributes) { 140 ((UnicodeSet*) set)->UnicodeSet::closeOver(attributes); 141} 142