1// © 2016 and later: Unicode, Inc. and others. 2// License & terms of use: http://www.unicode.org/copyright.html 3/* 4********************************************************************** 5* Copyright (C) 2003-2011, International Business Machines 6* Corporation and others. All Rights Reserved. 7********************************************************************** 8*/ 9 10#include "uvector.h" 11 12U_NAMESPACE_BEGIN 13 14UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UStack) 15 16UStack::UStack(UErrorCode &status) : 17 UVector(status) 18{ 19} 20 21UStack::UStack(int32_t initialCapacity, UErrorCode &status) : 22 UVector(initialCapacity, status) 23{ 24} 25 26UStack::UStack(UObjectDeleter *d, UElementsAreEqual *c, UErrorCode &status) : 27 UVector(d, c, status) 28{ 29} 30 31UStack::UStack(UObjectDeleter *d, UElementsAreEqual *c, int32_t initialCapacity, UErrorCode &status) : 32 UVector(d, c, initialCapacity, status) 33{ 34} 35 36UStack::~UStack() {} 37 38void* UStack::pop(void) { 39 int32_t n = size() - 1; 40 void* result = 0; 41 if (n >= 0) { 42 result = elementAt(n); 43 removeElementAt(n); 44 } 45 return result; 46} 47 48int32_t UStack::popi(void) { 49 int32_t n = size() - 1; 50 int32_t result = 0; 51 if (n >= 0) { 52 result = elementAti(n); 53 removeElementAt(n); 54 } 55 return result; 56} 57 58int32_t UStack::search(void* obj) const { 59 int32_t i = indexOf(obj); 60 return (i >= 0) ? size() - i : i; 61} 62 63U_NAMESPACE_END 64