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
12 U_NAMESPACE_BEGIN
13
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UStack)14 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UStack)
15
16 UStack::UStack(UErrorCode &status) :
17 UVector(status)
18 {
19 }
20
UStack(int32_t initialCapacity,UErrorCode & status)21 UStack::UStack(int32_t initialCapacity, UErrorCode &status) :
22 UVector(initialCapacity, status)
23 {
24 }
25
UStack(UObjectDeleter * d,UElementsAreEqual * c,UErrorCode & status)26 UStack::UStack(UObjectDeleter *d, UElementsAreEqual *c, UErrorCode &status) :
27 UVector(d, c, status)
28 {
29 }
30
UStack(UObjectDeleter * d,UElementsAreEqual * c,int32_t initialCapacity,UErrorCode & status)31 UStack::UStack(UObjectDeleter *d, UElementsAreEqual *c, int32_t initialCapacity, UErrorCode &status) :
32 UVector(d, c, initialCapacity, status)
33 {
34 }
35
~UStack()36 UStack::~UStack() {}
37
pop(void)38 void* 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
popi(void)48 int32_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
search(void * obj) const58 int32_t UStack::search(void* obj) const {
59 int32_t i = indexOf(obj);
60 return (i >= 0) ? size() - i : i;
61 }
62
63 U_NAMESPACE_END
64