150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho********************************************************************** 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Copyright (C) 1999-2010, International Business Machines 450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Corporation and others. All Rights Reserved. 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho********************************************************************** 650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/ 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UVector64 is a class implementing a vector of 64 bit integers. 1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// It is similar to UVector32, but holds int64_t values rather than int32_t. 1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Most of the code is unchanged from UVector. 1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef UVECTOR64_H 1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define UVECTOR64_H 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/utypes.h" 1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/uobject.h" 1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "uhash.h" 2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "uassert.h" 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN 2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p>Ultralightweight C++ implementation of an <tt>int64_t</tt> vector 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * that has a subset of methods from UVector32 2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p>This is a very simple implementation, written to satisfy an 3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * immediate porting need. As such, it is not completely fleshed out, 3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * and it aims for simplicity and conformity. Nonetheless, it serves 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * its purpose (porting code from java that uses java.util.Vector) 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * well, and it could be easily made into a more robust vector class. 3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p><b>Design notes</b> 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p>There is index bounds checking, but little is done about it. If 3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * indices are out of bounds, either nothing happens, or zero is 4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * returned. We <em>do</em> avoid indexing off into the weeds. 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p>There is detection of out of memory, but the handling is very 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * coarse-grained -- similar to UnicodeString's protocol, but even 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * coarser. The class contains <em>one static flag</em> that is set 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * when any call to <tt>new</tt> returns zero. This allows the caller 4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * to use several vectors and make just one check at the end to see if 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * a memory failure occurred. This is more efficient than making a 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * check after each call on each vector when doing many operations on 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * multiple vectors. The single static flag works best when memory 5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * failures are infrequent, and when recovery options are limited or 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * nonexistent. 5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p><b>To do</b> 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * <p>Improve the handling of index out of bounds errors. 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass U_COMMON_API UVector64 : public UObject { 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprivate: 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t count; 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t capacity; 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t maxCapacity; // Limit beyond which capacity is not permitted to grow. 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t* elements; 6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVector64(UErrorCode &status); 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVector64(int32_t initialCapacity, UErrorCode &status); 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual ~UVector64(); 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Assign this object to another (make this a copy of 'other'). 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Use the 'assign' function to assign each element. 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void assign(const UVector64& other, UErrorCode &ec); 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Compare this vector with another. They will be considered 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * equal if they are of the same size and all elements are equal, 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * as compared using this object's comparer. 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool operator==(const UVector64& other); 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Equivalent to !operator==() 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho inline UBool operator!=(const UVector64& other); 9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //------------------------------------------------------------ 9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // subset of java.util.Vector API 9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //------------------------------------------------------------ 9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void addElement(int64_t elem, UErrorCode &status); 9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setElementAt(int64_t elem, int32_t index); 10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void insertElementAt(int64_t elem, int32_t index, UErrorCode &status); 10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t elementAti(int32_t index) const; 10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool equals(const UVector64 &other) const; 10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t lastElementi(void) const; 10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 10950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //int32_t indexOf(int64_t elem, int32_t startIndex = 0) const; 11050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool contains(int64_t elem) const; 11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool containsAll(const UVector64& other) const; 11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool removeAll(const UVector64& other); 11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool retainAll(const UVector64& other); 11850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //void removeElementAt(int32_t index); 12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void removeAllElements(); 12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t size(void) const; 12450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool isEmpty(void) const; 12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Inline. Use this one for speedy size check. 12850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho inline UBool ensureCapacity(int32_t minimumCapacity, UErrorCode &status); 12950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 13050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Out-of-line, handles actual growth. Called by ensureCapacity() when necessary. 13150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool expandCapacity(int32_t minimumCapacity, UErrorCode &status); 13250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 13350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 13450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Change the size of this vector as follows: If newSize is 13550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * smaller, then truncate the array, possibly deleting held 13650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * elements for i >= newSize. If newSize is larger, grow the 13750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * array, filling in new slows with zero. 13850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setSize(int32_t newSize); 14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //------------------------------------------------------------ 14250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // New API 14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //------------------------------------------------------------ 14450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool containsNone(const UVector64& other) const; 14650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //void sortedInsert(int64_t elem, UErrorCode& ec); 14950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 15050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 15150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Returns a pointer to the internal array holding the vector. 15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 15350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t *getBuffer() const; 15450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 15550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 15650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Set the maximum allowed buffer capacity for this vector/stack. 15750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Default with no limit set is unlimited, go until malloc() fails. 15850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * A Limit of zero means unlimited capacity. 15950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Units are vector elements (64 bits each), not bytes. 16050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 16150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void setMaxCapacity(int32_t limit); 16250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 16350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * ICU "poor man's RTTI", returns a UClassID for this class. 16550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho static UClassID U_EXPORT2 getStaticClassID(); 16750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 16850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /** 16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * ICU "poor man's RTTI", returns a UClassID for the actual class. 17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho virtual UClassID getDynamicClassID() const; 17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoprivate: 17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho void _init(int32_t initialCapacity, UErrorCode &status); 17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Disallow 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVector64(const UVector64&); 17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Disallow 18050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVector64& operator=(const UVector64&); 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // API Functions for Stack operations. 18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // In the original UVector, these were in a separate derived class, UStack. 18550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Here in UVector64, they are all together. 18650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehopublic: 18750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //UBool empty(void) const; // TODO: redundant, same as empty(). Remove it? 18850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 18950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //int64_t peeki(void) const; 19050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t popi(void); 19250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t push(int64_t i, UErrorCode &status); 19450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t *reserveBlock(int32_t size, UErrorCode &status); 19650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t *popFrame(int32_t size); 19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UVector64 inlines 20150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 20250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline UBool UVector64::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) { 20327f654740f2a26ad62a5c155af9199af9e69b889claireho if ((minimumCapacity >= 0) && (capacity >= minimumCapacity)) { 20450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return TRUE; 20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return expandCapacity(minimumCapacity, status); 20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t UVector64::elementAti(int32_t index) const { 21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (0 <= index && index < count) ? elements[index] : 0; 21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 21550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline void UVector64::addElement(int64_t elem, UErrorCode &status) { 21650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ensureCapacity(count + 1, status)) { 21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho elements[count] = elem; 21850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho count++; 21950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 22050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 22150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 22250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t *UVector64::reserveBlock(int32_t size, UErrorCode &status) { 22350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ensureCapacity(count+size, status) == FALSE) { 22450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return NULL; 22550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t *rp = elements+count; 22750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho count += size; 22850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return rp; 22950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 23050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 23150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t *UVector64::popFrame(int32_t size) { 23250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ASSERT(count >= size); 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho count -= size; 23450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (count < 0) { 23550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho count = 0; 23650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 23750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return elements+count-size; 23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 23950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int32_t UVector64::size(void) const { 24350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return count; 24450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 24550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t UVector64::lastElementi(void) const { 24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return elementAti(count-1); 24850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline UBool UVector64::operator!=(const UVector64& other) { 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return !operator==(other); 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t *UVector64::getBuffer() const { 25550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return elements; 25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UStack inlines 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t UVector64::push(int64_t i, UErrorCode &status) { 26250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addElement(i, status); 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return i; 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoinline int64_t UVector64::popi(void) { 26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int64_t result = 0; 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (count > 0) { 26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho count--; 27050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result = elements[count]; 27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return result; 27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 27450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 27550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END 27650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 278