| Index: icu46/source/i18n/nfrlist.h
|
| ===================================================================
|
| --- icu46/source/i18n/nfrlist.h (revision 0)
|
| +++ icu46/source/i18n/nfrlist.h (revision 0)
|
| @@ -0,0 +1,97 @@
|
| +/*
|
| +******************************************************************************
|
| +* Copyright (C) 1997-2008, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +******************************************************************************
|
| +* file name: nfrlist.h
|
| +* encoding: US-ASCII
|
| +* tab size: 8 (not used)
|
| +* indentation:4
|
| +*
|
| +* Modification history
|
| +* Date Name Comments
|
| +* 10/11/2001 Doug Ported from ICU4J
|
| +*/
|
| +
|
| +#ifndef NFRLIST_H
|
| +#define NFRLIST_H
|
| +
|
| +#include "unicode/rbnf.h"
|
| +
|
| +#if U_HAVE_RBNF
|
| +
|
| +#include "unicode/uobject.h"
|
| +#include "nfrule.h"
|
| +
|
| +#include "cmemory.h"
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +// unsafe class for internal use only. assume memory allocations succeed, indexes are valid.
|
| +// should be a template, but we can't use them
|
| +
|
| +class NFRuleList : public UMemory {
|
| +protected:
|
| + NFRule** fStuff;
|
| + uint32_t fCount;
|
| + uint32_t fCapacity;
|
| +public:
|
| + NFRuleList(uint32_t capacity = 10)
|
| + : fStuff(capacity ? (NFRule**)uprv_malloc(capacity * sizeof(NFRule*)) : NULL)
|
| + , fCount(0)
|
| + , fCapacity(capacity) {};
|
| + ~NFRuleList() {
|
| + if (fStuff) {
|
| + for(uint32_t i = 0; i < fCount; ++i) {
|
| + delete fStuff[i];
|
| + }
|
| + uprv_free(fStuff);
|
| + }
|
| + }
|
| + NFRule* operator[](uint32_t index) const { return fStuff != NULL ? fStuff[index] : NULL; }
|
| + NFRule* remove(uint32_t index) {
|
| + if (fStuff == NULL) {
|
| + return NULL;
|
| + }
|
| + NFRule* result = fStuff[index];
|
| + fCount -= 1;
|
| + for (uint32_t i = index; i < fCount; ++i) { // assumes small arrays
|
| + fStuff[i] = fStuff[i+1];
|
| + }
|
| + return result;
|
| + }
|
| + void add(NFRule* thing) {
|
| + if (fCount == fCapacity) {
|
| + fCapacity += 10;
|
| + fStuff = (NFRule**)uprv_realloc(fStuff, fCapacity * sizeof(NFRule*)); // assume success
|
| + }
|
| + if (fStuff != NULL) {
|
| + fStuff[fCount++] = thing;
|
| + } else {
|
| + fCapacity = 0;
|
| + fCount = 0;
|
| + }
|
| + }
|
| + uint32_t size() const { return fCount; }
|
| + NFRule* last() const { return (fCount > 0 && fStuff != NULL) ? fStuff[fCount-1] : NULL; }
|
| + NFRule** release() {
|
| + add(NULL); // ensure null termination
|
| + NFRule** result = fStuff;
|
| + fStuff = NULL;
|
| + fCount = 0;
|
| + fCapacity = 0;
|
| + return result;
|
| + }
|
| +
|
| +private:
|
| + NFRuleList(const NFRuleList &other); // forbid copying of this class
|
| + NFRuleList &operator=(const NFRuleList &other); // forbid copying of this class
|
| +};
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +/* U_HAVE_RBNF */
|
| +#endif
|
| +
|
| +// NFRLIST_H
|
| +#endif
|
|
|
| Property changes on: icu46/source/i18n/nfrlist.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|