Lines Matching refs:table
16 * This module maintains a contraction table structure in expanded form
77 static ContractionTable *addATableElement(CntTable *table, uint32_t *key, UErrorCode *status) {
98 table->elements[table->size] = el;
100 //uhash_put(table->elements, (void *)table->size, el, status);
102 *key = table->size++;
104 if(table->size == table->capacity) {
105 ContractionTable **newElements = (ContractionTable **)uprv_malloc(table->capacity*2*sizeof(ContractionTable *));
107 /* table->elements = (ContractionTable **)realloc(table->elements, table->capacity*2*sizeof(ContractionTable *));*/
113 ContractionTable **oldElements = table->elements;
114 uprv_memcpy(newElements, oldElements, table->capacity*sizeof(ContractionTable *));
115 uprv_memset(newElements+table->capacity, 0, table->capacity*sizeof(ContractionTable *));
116 table->capacity *= 2;
117 table->elements = newElements;
130 uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *status) {
132 if(U_FAILURE(*status) || table->size == 0) {
136 table->position = 0;
138 if(table->offsets != NULL) {
139 uprv_free(table->offsets);
141 table->offsets = (int32_t *)uprv_malloc(table->size*sizeof(int32_t));
142 if(table->offsets == NULL) {
149 for(i = 0; i<table->size; i++) {
150 table->offsets[i] = table->position+mainOffset;
151 table->position += table->elements[i]->position;
155 if(table->CEs != NULL) {
156 uprv_free(table->CEs);
158 table->CEs = (uint32_t *)uprv_malloc(table->position*sizeof(uint32_t));
159 if(table->CEs == NULL) {
161 uprv_free(table->offsets);
162 table->offsets = NULL;
165 uprv_memset(table->CEs, '?', table->position*sizeof(uint32_t));
167 if(table->codePoints != NULL) {
168 uprv_free(table->codePoints);
170 table->codePoints = (UChar *)uprv_malloc(table->position*sizeof(UChar));
171 if(table->codePoints == NULL) {
173 uprv_free(table->offsets);
174 table->offsets = NULL;
175 uprv_free(table->CEs);
176 table->CEs = NULL;
179 uprv_memset(table->codePoints, '?', table->position*sizeof(UChar));
183 UChar *cpPointer = table->codePoints;
184 uint32_t *CEPointer = table->CEs;
185 for(i = 0; i<table->size; i++) {
186 int32_t size = table->elements[i]->position;
189 cc = u_getCombiningClass(table->elements[i]->codePoints[j]);
196 *(cpPointer+j) = table->elements[i]->codePoints[j];
200 uprv_memcpy(CEPointer, table->elements[i]->CEs, size*sizeof(uint32_t));
203 *(CEPointer+j) = constructContractCE(getCETag(*(CEPointer+j)), table->offsets[getContractOffset(*(CEPointer+j))]);
217 /*CE = ucmpe32_get(table->mapping, i);*/
218 CE = utrie_get32(table->mapping, i, NULL);
220 CE = constructContractCE(getCETag(CE), table->offsets[getContractOffset(CE)]);
221 /*ucmpe32_set(table->mapping, i, CE);*/
222 utrie_set32(table->mapping, i, CE);
227 return table->position;
335 uprv_cnttab_close(CntTable *table) {
337 for(i = 0; i<table->size; i++) {
338 uprv_free(table->elements[i]->CEs);
339 uprv_free(table->elements[i]->codePoints);
340 uprv_free(table->elements[i]);
342 uprv_free(table->elements);
343 uprv_free(table->CEs);
344 uprv_free(table->offsets);
345 uprv_free(table->codePoints);
346 uprv_free(table);
351 uprv_cnttab_changeLastCE(CntTable *table, uint32_t element, uint32_t value, UErrorCode *status) {
359 if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) {
365 return(constructContractCE(table->currentTag, element));
369 /* inserts a part of contraction sequence in table. Sequences behind the offset are moved back. If element is non existent, it creates on. Returns element handle */
371 uprv_cnttab_insertContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t value, UErrorCode *status) {
380 if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) {
381 tbl = addATableElement(table, &element, status);
407 return(constructContractCE(table->currentTag, element));
411 /* adds more contractions in table. If element is non existant, it creates on. Returns element handle */
413 uprv_cnttab_addContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t value, UErrorCode *status) {
423 if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) {
424 tbl = addATableElement(table, &element, status);
437 return(constructContractCE(table->currentTag, element));
440 /* sets a part of contraction sequence in table. If element is non existant, it creates on. Returns element handle */
442 uprv_cnttab_setContraction(CntTable *table, uint32_t element, uint32_t offset, UChar codePoint, uint32_t value, UErrorCode *status) {
451 if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) {
452 tbl = addATableElement(table, &element, status);
467 return(constructContractCE(table->currentTag, element));
470 static ContractionTable *_cnttab_getContractionTable(CntTable *table, uint32_t element) {
475 tbl = table->elements[element]; /* This could also return NULL */
511 uprv_cnttab_findCP(CntTable *table, uint32_t element, UChar codePoint, UErrorCode *status) {
517 return _cnttab_findCP(_cnttab_getContractionTable(table, element), codePoint);
521 uprv_cnttab_getCE(CntTable *table, uint32_t element, uint32_t position, UErrorCode *status) {
526 return(_cnttab_getCE(_cnttab_getContractionTable(table, element), position));
530 uprv_cnttab_findCE(CntTable *table, uint32_t element, UChar codePoint, UErrorCode *status) {
534 ContractionTable *tbl = _cnttab_getContractionTable(table, element);
539 uprv_cnttab_isTailored(CntTable *table, uint32_t element, UChar *ztString, UErrorCode *status) {
545 element = uprv_cnttab_findCE(table, element, *(ztString), status);
554 return (UBool)(uprv_cnttab_getCE(table
558 uprv_cnttab_changeContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t newCE, UErrorCode *status) {
567 if((element == 0xFFFFFF) || (tbl = table->elements[element]) == NULL) {