| Index: source/common/unorm_it.c | 
| diff --git a/source/common/unorm_it.c b/source/common/unorm_it.c | 
| deleted file mode 100644 | 
| index 3adb1ce07ed858802b6e4c823775819df664118b..0000000000000000000000000000000000000000 | 
| --- a/source/common/unorm_it.c | 
| +++ /dev/null | 
| @@ -1,646 +0,0 @@ | 
| -/* | 
| -******************************************************************************* | 
| -* | 
| -*   Copyright (C) 2003-2011, International Business Machines | 
| -*   Corporation and others.  All Rights Reserved. | 
| -* | 
| -******************************************************************************* | 
| -*   file name:  unorm_it.c | 
| -*   encoding:   US-ASCII | 
| -*   tab size:   8 (not used) | 
| -*   indentation:4 | 
| -* | 
| -*   created on: 2003jan21 | 
| -*   created by: Markus W. Scherer | 
| -*/ | 
| - | 
| -#include "unicode/utypes.h" | 
| - | 
| -#if !UCONFIG_NO_COLLATION && !UCONFIG_NO_NORMALIZATION | 
| - | 
| -#include "unicode/uiter.h" | 
| -#include "unicode/unorm.h" | 
| -#include "unicode/utf.h" | 
| -#include "unorm_it.h" | 
| -#include "cmemory.h" | 
| - | 
| -/* UNormIterator ------------------------------------------------------------ */ | 
| - | 
| -enum { | 
| -    INITIAL_CAPACITY=100 | 
| -}; | 
| - | 
| -struct UNormIterator { | 
| -    UCharIterator api; | 
| -    UCharIterator *iter; | 
| - | 
| -    /* | 
| -     * chars and states either use the static buffers | 
| -     * or are allocated in the same memory block | 
| -     * | 
| -     * They are parallel arrays with states[] holding the getState() values | 
| -     * from normalization boundaries, and UITER_NO_STATE in between. | 
| -     */ | 
| -    UChar *chars; | 
| -    uint32_t *states; | 
| - | 
| -    /* | 
| -     * api.start: first valid character & state in the arrays | 
| -     * api.index: current position | 
| -     * api.limit: one past the last valid character in chars[], but states[limit] is valid | 
| -     * capacity: length of allocated arrays | 
| -     */ | 
| -    int32_t capacity; | 
| - | 
| -    /* the current iter->getState(), saved to avoid unnecessary setState() calls; may not correspond to api->index! */ | 
| -    uint32_t state; | 
| - | 
| -    /* there are UChars available before start or after limit? */ | 
| -    UBool hasPrevious, hasNext, isStackAllocated; | 
| - | 
| -    UNormalizationMode mode; | 
| - | 
| -    UChar charsBuffer[INITIAL_CAPACITY]; | 
| -    uint32_t statesBuffer[INITIAL_CAPACITY+1]; /* one more than charsBuffer[]! */ | 
| -}; | 
| - | 
| -static void | 
| -initIndexes(UNormIterator *uni, UCharIterator *iter) { | 
| -    /* do not pass api so that the compiler knows it's an alias pointer to uni itself */ | 
| -    UCharIterator *api=&uni->api; | 
| - | 
| -    if(!iter->hasPrevious(iter)) { | 
| -        /* set indexes to the beginning of the arrays */ | 
| -        api->start=api->index=api->limit=0; | 
| -        uni->hasPrevious=FALSE; | 
| -        uni->hasNext=iter->hasNext(iter); | 
| -    } else if(!iter->hasNext(iter)) { | 
| -        /* set indexes to the end of the arrays */ | 
| -        api->start=api->index=api->limit=uni->capacity; | 
| -        uni->hasNext=FALSE; | 
| -        uni->hasPrevious=iter->hasPrevious(iter); | 
| -    } else { | 
| -        /* set indexes into the middle of the arrays */ | 
| -        api->start=api->index=api->limit=uni->capacity/2; | 
| -        uni->hasPrevious=uni->hasNext=TRUE; | 
| -    } | 
| -} | 
| - | 
| -static UBool | 
| -reallocArrays(UNormIterator *uni, int32_t capacity, UBool addAtStart) { | 
| -    /* do not pass api so that the compiler knows it's an alias pointer to uni itself */ | 
| -    UCharIterator *api=&uni->api; | 
| - | 
| -    uint32_t *states; | 
| -    UChar *chars; | 
| -    int32_t start, limit; | 
| - | 
| -    states=(uint32_t *)uprv_malloc((capacity+1)*4+capacity*2); | 
| -    if(states==NULL) { | 
| -        return FALSE; | 
| -    } | 
| - | 
| -    chars=(UChar *)(states+(capacity+1)); | 
| -    uni->capacity=capacity; | 
| - | 
| -    start=api->start; | 
| -    limit=api->limit; | 
| - | 
| -    if(addAtStart) { | 
| -        /* copy old contents to the end of the new arrays */ | 
| -        int32_t delta; | 
| - | 
| -        delta=capacity-uni->capacity; | 
| -        uprv_memcpy(states+delta+start, uni->states+start, (limit-start+1)*4); | 
| -        uprv_memcpy(chars+delta+start, uni->chars+start, (limit-start)*4); | 
| - | 
| -        api->start=start+delta; | 
| -        api->index+=delta; | 
| -        api->limit=limit+delta; | 
| -    } else { | 
| -        /* copy old contents to the beginning of the new arrays */ | 
| -        uprv_memcpy(states+start, uni->states+start, (limit-start+1)*4); | 
| -        uprv_memcpy(chars+start, uni->chars+start, (limit-start)*4); | 
| -    } | 
| - | 
| -    uni->chars=chars; | 
| -    uni->states=states; | 
| - | 
| -    return TRUE; | 
| -} | 
| - | 
| -static void | 
| -moveContentsTowardStart(UCharIterator *api, UChar chars[], uint32_t states[], int32_t delta) { | 
| -    /* move array contents up to make room */ | 
| -    int32_t srcIndex, destIndex, limit; | 
| - | 
| -    limit=api->limit; | 
| -    srcIndex=delta; | 
| -    if(srcIndex>api->start) { | 
| -        /* look for a position in the arrays with a known state */ | 
| -        while(srcIndex<limit && states[srcIndex]==UITER_NO_STATE) { | 
| -            ++srcIndex; | 
| -        } | 
| -    } | 
| - | 
| -    /* now actually move the array contents */ | 
| -    api->start=destIndex=0; | 
| -    while(srcIndex<limit) { | 
| -        chars[destIndex]=chars[srcIndex]; | 
| -        states[destIndex++]=states[srcIndex++]; | 
| -    } | 
| - | 
| -    /* copy states[limit] as well! */ | 
| -    states[destIndex]=states[srcIndex]; | 
| - | 
| -    api->limit=destIndex; | 
| -} | 
| - | 
| -static void | 
| -moveContentsTowardEnd(UCharIterator *api, UChar chars[], uint32_t states[], int32_t delta) { | 
| -    /* move array contents up to make room */ | 
| -    int32_t srcIndex, destIndex, start; | 
| - | 
| -    start=api->start; | 
| -    destIndex=((UNormIterator *)api)->capacity; | 
| -    srcIndex=destIndex-delta; | 
| -    if(srcIndex<api->limit) { | 
| -        /* look for a position in the arrays with a known state */ | 
| -        while(srcIndex>start && states[srcIndex]==UITER_NO_STATE) { | 
| -            --srcIndex; | 
| -        } | 
| -    } | 
| - | 
| -    /* now actually move the array contents */ | 
| -    api->limit=destIndex; | 
| - | 
| -    /* copy states[limit] as well! */ | 
| -    states[destIndex]=states[srcIndex]; | 
| - | 
| -    while(srcIndex>start) { | 
| -        chars[--destIndex]=chars[--srcIndex]; | 
| -        states[destIndex]=states[srcIndex]; | 
| -    } | 
| - | 
| -    api->start=destIndex; | 
| -} | 
| - | 
| -/* normalize forward from the limit, assume hasNext is true */ | 
| -static UBool | 
| -readNext(UNormIterator *uni, UCharIterator *iter) { | 
| -    /* do not pass api so that the compiler knows it's an alias pointer to uni itself */ | 
| -    UCharIterator *api=&uni->api; | 
| - | 
| -    /* make capacity/4 room at the end of the arrays */ | 
| -    int32_t limit, capacity, room; | 
| -    UErrorCode errorCode; | 
| - | 
| -    limit=api->limit; | 
| -    capacity=uni->capacity; | 
| -    room=capacity/4; | 
| -    if(room>(capacity-limit)) { | 
| -        /* move array contents to make room */ | 
| -        moveContentsTowardStart(api, uni->chars, uni->states, room); | 
| -        api->index=limit=api->limit; | 
| -        uni->hasPrevious=TRUE; | 
| -    } | 
| - | 
| -    /* normalize starting from the limit position */ | 
| -    errorCode=U_ZERO_ERROR; | 
| -    if(uni->state!=uni->states[limit]) { | 
| -        uiter_setState(iter, uni->states[limit], &errorCode); | 
| -        if(U_FAILURE(errorCode)) { | 
| -            uni->state=UITER_NO_STATE; | 
| -            uni->hasNext=FALSE; | 
| -            return FALSE; | 
| -        } | 
| -    } | 
| - | 
| -    room=unorm_next(iter, uni->chars+limit, capacity-limit, uni->mode, 0, TRUE, NULL, &errorCode); | 
| -    if(errorCode==U_BUFFER_OVERFLOW_ERROR) { | 
| -        if(room<=capacity) { | 
| -            /* empty and re-use the arrays */ | 
| -            uni->states[0]=uni->states[limit]; | 
| -            api->start=api->index=api->limit=limit=0; | 
| -            uni->hasPrevious=TRUE; | 
| -        } else { | 
| -            capacity+=room+100; | 
| -            if(!reallocArrays(uni, capacity, FALSE)) { | 
| -                uni->state=UITER_NO_STATE; | 
| -                uni->hasNext=FALSE; | 
| -                return FALSE; | 
| -            } | 
| -            limit=api->limit; | 
| -        } | 
| - | 
| -        errorCode=U_ZERO_ERROR; | 
| -        uiter_setState(iter, uni->states[limit], &errorCode); | 
| -        room=unorm_next(iter, uni->chars+limit, capacity-limit, uni->mode, 0, TRUE, NULL, &errorCode); | 
| -    } | 
| -    if(U_FAILURE(errorCode) || room==0) { | 
| -        uni->state=UITER_NO_STATE; | 
| -        uni->hasNext=FALSE; | 
| -        return FALSE; | 
| -    } | 
| - | 
| -    /* room>0 */ | 
| -    ++limit; /* leave the known states[limit] alone */ | 
| -    for(--room; room>0; --room) { | 
| -        /* set unknown states for all but the normalization boundaries */ | 
| -        uni->states[limit++]=UITER_NO_STATE; | 
| -    } | 
| -    uni->states[limit]=uni->state=uiter_getState(iter); | 
| -    uni->hasNext=iter->hasNext(iter); | 
| -    api->limit=limit; | 
| -    return TRUE; | 
| -} | 
| - | 
| -/* normalize backward from the start, assume hasPrevious is true */ | 
| -static UBool | 
| -readPrevious(UNormIterator *uni, UCharIterator *iter) { | 
| -    /* do not pass api so that the compiler knows it's an alias pointer to uni itself */ | 
| -    UCharIterator *api=&uni->api; | 
| - | 
| -    /* make capacity/4 room at the start of the arrays */ | 
| -    int32_t start, capacity, room; | 
| -    UErrorCode errorCode; | 
| - | 
| -    start=api->start; | 
| -    capacity=uni->capacity; | 
| -    room=capacity/4; | 
| -    if(room>start) { | 
| -        /* move array contents to make room */ | 
| -        moveContentsTowardEnd(api, uni->chars, uni->states, room); | 
| -        api->index=start=api->start; | 
| -        uni->hasNext=TRUE; | 
| -    } | 
| - | 
| -    /* normalize ending at the start position */ | 
| -    errorCode=U_ZERO_ERROR; | 
| -    if(uni->state!=uni->states[start]) { | 
| -        uiter_setState(iter, uni->states[start], &errorCode); | 
| -        if(U_FAILURE(errorCode)) { | 
| -            uni->state=UITER_NO_STATE; | 
| -            uni->hasPrevious=FALSE; | 
| -            return FALSE; | 
| -        } | 
| -    } | 
| - | 
| -    room=unorm_previous(iter, uni->chars, start, uni->mode, 0, TRUE, NULL, &errorCode); | 
| -    if(errorCode==U_BUFFER_OVERFLOW_ERROR) { | 
| -        if(room<=capacity) { | 
| -            /* empty and re-use the arrays */ | 
| -            uni->states[capacity]=uni->states[start]; | 
| -            api->start=api->index=api->limit=start=capacity; | 
| -            uni->hasNext=TRUE; | 
| -        } else { | 
| -            capacity+=room+100; | 
| -            if(!reallocArrays(uni, capacity, TRUE)) { | 
| -                uni->state=UITER_NO_STATE; | 
| -                uni->hasPrevious=FALSE; | 
| -                return FALSE; | 
| -            } | 
| -            start=api->start; | 
| -        } | 
| - | 
| -        errorCode=U_ZERO_ERROR; | 
| -        uiter_setState(iter, uni->states[start], &errorCode); | 
| -        room=unorm_previous(iter, uni->chars, start, uni->mode, 0, TRUE, NULL, &errorCode); | 
| -    } | 
| -    if(U_FAILURE(errorCode) || room==0) { | 
| -        uni->state=UITER_NO_STATE; | 
| -        uni->hasPrevious=FALSE; | 
| -        return FALSE; | 
| -    } | 
| - | 
| -    /* room>0 */ | 
| -    do { | 
| -        /* copy the UChars from chars[0..room[ to chars[(start-room)..start[ */ | 
| -        uni->chars[--start]=uni->chars[--room]; | 
| -        /* set unknown states for all but the normalization boundaries */ | 
| -        uni->states[start]=UITER_NO_STATE; | 
| -    } while(room>0); | 
| -    uni->states[start]=uni->state=uiter_getState(iter); | 
| -    uni->hasPrevious=iter->hasPrevious(iter); | 
| -    api->start=start; | 
| -    return TRUE; | 
| -} | 
| - | 
| -/* Iterator runtime API functions ------------------------------------------- */ | 
| - | 
| -static int32_t U_CALLCONV | 
| -unormIteratorGetIndex(UCharIterator *api, UCharIteratorOrigin origin) { | 
| -    switch(origin) { | 
| -    case UITER_ZERO: | 
| -    case UITER_START: | 
| -        return 0; | 
| -    case UITER_CURRENT: | 
| -    case UITER_LIMIT: | 
| -    case UITER_LENGTH: | 
| -        return UITER_UNKNOWN_INDEX; | 
| -    default: | 
| -        /* not a valid origin */ | 
| -        /* Should never get here! */ | 
| -        return -1; | 
| -    } | 
| -} | 
| - | 
| -static int32_t U_CALLCONV | 
| -unormIteratorMove(UCharIterator *api, int32_t delta, UCharIteratorOrigin origin) { | 
| -    UNormIterator *uni=(UNormIterator *)api; | 
| -    UCharIterator *iter=uni->iter; | 
| -    int32_t pos; | 
| - | 
| -    switch(origin) { | 
| -    case UITER_ZERO: | 
| -    case UITER_START: | 
| -        /* restart from the beginning */ | 
| -        if(uni->hasPrevious) { | 
| -            iter->move(iter, 0, UITER_START); | 
| -            api->start=api->index=api->limit=0; | 
| -            uni->states[api->limit]=uni->state=uiter_getState(iter); | 
| -            uni->hasPrevious=FALSE; | 
| -            uni->hasNext=iter->hasNext(iter); | 
| -        } else { | 
| -            /* we already have the beginning of the normalized text */ | 
| -            api->index=api->start; | 
| -        } | 
| -        break; | 
| -    case UITER_CURRENT: | 
| -        break; | 
| -    case UITER_LIMIT: | 
| -    case UITER_LENGTH: | 
| -        /* restart from the end */ | 
| -        if(uni->hasNext) { | 
| -            iter->move(iter, 0, UITER_LIMIT); | 
| -            api->start=api->index=api->limit=uni->capacity; | 
| -            uni->states[api->limit]=uni->state=uiter_getState(iter); | 
| -            uni->hasPrevious=iter->hasPrevious(iter); | 
| -            uni->hasNext=FALSE; | 
| -        } else { | 
| -            /* we already have the end of the normalized text */ | 
| -            api->index=api->limit; | 
| -        } | 
| -        break; | 
| -    default: | 
| -        return -1;  /* Error */ | 
| -    } | 
| - | 
| -    /* move relative to the current position by delta normalized UChars */ | 
| -    if(delta==0) { | 
| -        /* nothing to do */ | 
| -    } else if(delta>0) { | 
| -        /* go forward until the requested position is in the buffer */ | 
| -        for(;;) { | 
| -            pos=api->index+delta;   /* requested position */ | 
| -            delta=pos-api->limit;   /* remainder beyond buffered text */ | 
| -            if(delta<=0) { | 
| -                api->index=pos;     /* position reached */ | 
| -                break; | 
| -            } | 
| - | 
| -            /* go to end of buffer and normalize further */ | 
| -            api->index=api->limit; | 
| -            if(!uni->hasNext || !readNext(uni, iter)) { | 
| -                break;              /* reached end of text */ | 
| -            } | 
| -        } | 
| -    } else /* delta<0 */ { | 
| -        /* go backward until the requested position is in the buffer */ | 
| -        for(;;) { | 
| -            pos=api->index+delta;   /* requested position */ | 
| -            delta=pos-api->start;   /* remainder beyond buffered text */ | 
| -            if(delta>=0) { | 
| -                api->index=pos;     /* position reached */ | 
| -                break; | 
| -            } | 
| - | 
| -            /* go to start of buffer and normalize further */ | 
| -            api->index=api->start; | 
| -            if(!uni->hasPrevious || !readPrevious(uni, iter)) { | 
| -                break;              /* reached start of text */ | 
| -            } | 
| -        } | 
| -    } | 
| - | 
| -    if(api->index==api->start && !uni->hasPrevious) { | 
| -        return 0; | 
| -    } else { | 
| -        return UITER_UNKNOWN_INDEX; | 
| -    } | 
| -} | 
| - | 
| -static UBool U_CALLCONV | 
| -unormIteratorHasNext(UCharIterator *api) { | 
| -    return api->index<api->limit || ((UNormIterator *)api)->hasNext; | 
| -} | 
| - | 
| -static UBool U_CALLCONV | 
| -unormIteratorHasPrevious(UCharIterator *api) { | 
| -    return api->index>api->start || ((UNormIterator *)api)->hasPrevious; | 
| -} | 
| - | 
| -static UChar32 U_CALLCONV | 
| -unormIteratorCurrent(UCharIterator *api) { | 
| -    UNormIterator *uni=(UNormIterator *)api; | 
| - | 
| -    if( api->index<api->limit || | 
| -        (uni->hasNext && readNext(uni, uni->iter)) | 
| -    ) { | 
| -        return uni->chars[api->index]; | 
| -    } else { | 
| -        return U_SENTINEL; | 
| -    } | 
| -} | 
| - | 
| -static UChar32 U_CALLCONV | 
| -unormIteratorNext(UCharIterator *api) { | 
| -    UNormIterator *uni=(UNormIterator *)api; | 
| - | 
| -    if( api->index<api->limit || | 
| -        (uni->hasNext && readNext(uni, uni->iter)) | 
| -    ) { | 
| -        return uni->chars[api->index++]; | 
| -    } else { | 
| -        return U_SENTINEL; | 
| -    } | 
| -} | 
| - | 
| -static UChar32 U_CALLCONV | 
| -unormIteratorPrevious(UCharIterator *api) { | 
| -    UNormIterator *uni=(UNormIterator *)api; | 
| - | 
| -    if( api->index>api->start || | 
| -        (uni->hasPrevious && readPrevious(uni, uni->iter)) | 
| -    ) { | 
| -        return uni->chars[--api->index]; | 
| -    } else { | 
| -        return U_SENTINEL; | 
| -    } | 
| -} | 
| - | 
| -static uint32_t U_CALLCONV | 
| -unormIteratorGetState(const UCharIterator *api) { | 
| -    /* not uni->state because that may not be at api->index */ | 
| -    return ((UNormIterator *)api)->states[api->index]; | 
| -} | 
| - | 
| -static void U_CALLCONV | 
| -unormIteratorSetState(UCharIterator *api, uint32_t state, UErrorCode *pErrorCode) { | 
| -    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { | 
| -        /* do nothing */ | 
| -    } else if(api==NULL) { | 
| -        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; | 
| -    } else if(state==UITER_NO_STATE) { | 
| -        *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; | 
| -    } else { | 
| -        UNormIterator *uni=(UNormIterator *)api; | 
| -        UCharIterator *iter=((UNormIterator *)api)->iter; | 
| -        if(state!=uni->state) { | 
| -            uni->state=state; | 
| -            uiter_setState(iter, state, pErrorCode); | 
| -        } | 
| - | 
| -        /* | 
| -         * Try shortcuts: If the requested state is in the array contents | 
| -         * then just set the index there. | 
| -         * | 
| -         * We assume that the state is unique per position! | 
| -         */ | 
| -        if(state==uni->states[api->index]) { | 
| -            return; | 
| -        } else if(state==uni->states[api->limit]) { | 
| -            api->index=api->limit; | 
| -            return; | 
| -        } else { | 
| -            /* search for the index with this state */ | 
| -            int32_t i; | 
| - | 
| -            for(i=api->start; i<api->limit; ++i) { | 
| -                if(state==uni->states[i]) { | 
| -                    api->index=i; | 
| -                    return; | 
| -                } | 
| -            } | 
| -        } | 
| - | 
| -        /* there is no array index for this state, reset for fresh contents */ | 
| -        initIndexes((UNormIterator *)api, iter); | 
| -        uni->states[api->limit]=state; | 
| -    } | 
| -} | 
| - | 
| -static const UCharIterator unormIterator={ | 
| -    NULL, 0, 0, 0, 0, 0, | 
| -    unormIteratorGetIndex, | 
| -    unormIteratorMove, | 
| -    unormIteratorHasNext, | 
| -    unormIteratorHasPrevious, | 
| -    unormIteratorCurrent, | 
| -    unormIteratorNext, | 
| -    unormIteratorPrevious, | 
| -    NULL, | 
| -    unormIteratorGetState, | 
| -    unormIteratorSetState | 
| -}; | 
| - | 
| -/* Setup functions ---------------------------------------------------------- */ | 
| - | 
| -U_CAPI UNormIterator * U_EXPORT2 | 
| -unorm_openIter(void *stackMem, int32_t stackMemSize, UErrorCode *pErrorCode) { | 
| -    UNormIterator *uni; | 
| - | 
| -    /* argument checking */ | 
| -    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { | 
| -        return NULL; | 
| -    } | 
| - | 
| -    /* allocate */ | 
| -    uni=NULL; | 
| -    if(stackMem!=NULL && stackMemSize>=sizeof(UNormIterator)) { | 
| -        if(U_ALIGNMENT_OFFSET(stackMem)==0) { | 
| -            /* already aligned */ | 
| -            uni=(UNormIterator *)stackMem; | 
| -        } else { | 
| -            int32_t align=(int32_t)U_ALIGNMENT_OFFSET_UP(stackMem); | 
| -            if((stackMemSize-=align)>=(int32_t)sizeof(UNormIterator)) { | 
| -                /* needs alignment */ | 
| -                uni=(UNormIterator *)((char *)stackMem+align); | 
| -            } | 
| -        } | 
| -        /* else does not fit */ | 
| -    } | 
| - | 
| -    if(uni!=NULL) { | 
| -        uni->isStackAllocated=TRUE; | 
| -    } else { | 
| -        uni=(UNormIterator *)uprv_malloc(sizeof(UNormIterator)); | 
| -        if(uni==NULL) { | 
| -            *pErrorCode=U_MEMORY_ALLOCATION_ERROR; | 
| -            return NULL; | 
| -        } | 
| -        uni->isStackAllocated=FALSE; | 
| -    } | 
| - | 
| -    /* | 
| -     * initialize | 
| -     * do not memset because that would unnecessarily initialize the arrays | 
| -     */ | 
| -    uni->iter=NULL; | 
| -    uni->chars=uni->charsBuffer; | 
| -    uni->states=uni->statesBuffer; | 
| -    uni->capacity=INITIAL_CAPACITY; | 
| -    uni->state=UITER_NO_STATE; | 
| -    uni->hasPrevious=uni->hasNext=FALSE; | 
| -    uni->mode=UNORM_NONE; | 
| - | 
| -    /* set a no-op iterator into the api */ | 
| -    uiter_setString(&uni->api, NULL, 0); | 
| -    return uni; | 
| -} | 
| - | 
| -U_CAPI void U_EXPORT2 | 
| -unorm_closeIter(UNormIterator *uni) { | 
| -    if(uni!=NULL) { | 
| -        if(uni->states!=uni->statesBuffer) { | 
| -            /* chars and states are allocated in the same memory block */ | 
| -            uprv_free(uni->states); | 
| -        } | 
| -        if(!uni->isStackAllocated) { | 
| -            uprv_free(uni); | 
| -        } | 
| -    } | 
| -} | 
| - | 
| -U_CAPI UCharIterator * U_EXPORT2 | 
| -unorm_setIter(UNormIterator *uni, UCharIterator *iter, UNormalizationMode mode, UErrorCode *pErrorCode) { | 
| -    /* argument checking */ | 
| -    if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { | 
| -        return NULL; | 
| -    } | 
| -    if(uni==NULL) { | 
| -        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; | 
| -        return NULL; | 
| -    } | 
| -    if( iter==NULL || iter->getState==NULL || iter->setState==NULL || | 
| -        mode<UNORM_NONE || UNORM_MODE_COUNT<=mode | 
| -    ) { | 
| -        /* set a no-op iterator into the api */ | 
| -        uiter_setString(&uni->api, NULL, 0); | 
| -        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; | 
| -        return NULL; | 
| -    } | 
| - | 
| -    /* set the iterator and initialize */ | 
| -    uprv_memcpy(&uni->api, &unormIterator, sizeof(unormIterator)); | 
| - | 
| -    uni->iter=iter; | 
| -    uni->mode=mode; | 
| - | 
| -    initIndexes(uni, iter); | 
| -    uni->states[uni->api.limit]=uni->state=uiter_getState(iter); | 
| - | 
| -    return &uni->api; | 
| -} | 
| - | 
| -#endif /* uconfig.h switches */ | 
|  |