1/*---------------------------------------------------------------------------*
2 *  Int8ArrayList.h  *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20#ifndef __INT8ARRAYLIST_H
21#define __INT8ARRAYLIST_H
22
23
24
25#include "ESR_ReturnCode.h"
26#include "ESR_SharedPrefix.h"
27#include "ptypes.h"
28#include <stdlib.h>
29
30/**
31 * @addtogroup Int8ArrayListModule Int8ArrayList API functions
32 * List of Int8 elements.
33 *
34 * @{
35 */
36
37/**
38 * List of elements.
39 */
40typedef struct Int8ArrayList_t
41{
42  /**
43   * Adds element to list.
44   *
45   * @param self Int8ArrayList handle
46   * @param element Element to be added
47   */
48  ESR_ReturnCode(*add)(struct Int8ArrayList_t* self, asr_int8_t element);
49
50  /**
51  * Removes element from list.
52  *
53  * @param self Int8ArrayList handle
54  * @param element Element to be removed
55  */
56  ESR_ReturnCode(*remove)(struct Int8ArrayList_t* self, asr_int8_t element);
57
58  /**
59  * Removes all elements from list.
60  *
61  * @param self Int8ArrayList handle
62  */
63  ESR_ReturnCode(*removeAll)(struct Int8ArrayList_t* self);
64
65  /**
66  * Indicates if element is contained within the list.
67  *
68  * @param self Int8ArrayList handle
69  * @param element Element to check for
70  * @param exists True if element was found
71  */
72  ESR_ReturnCode(*contains)(struct Int8ArrayList_t* self, asr_int8_t element, ESR_BOOL* exists);
73
74  /**
75  * Returns array size.
76  *
77  * @param self Int8ArrayList handle
78  * @param size Returned size
79  */
80  ESR_ReturnCode(*getSize)(struct Int8ArrayList_t* self, size_t* size);
81
82  /**
83  * Returns the element at the specified index.
84  *
85  * @param self Int8ArrayList handle
86  * @param index Element index
87  * @param element Element being returned
88  */
89  ESR_ReturnCode(*get)(struct Int8ArrayList_t* self, size_t index, asr_int8_t* element);
90
91  /**
92  * Sets the element at the specified index.
93  *
94  * NOTE: Does *not* deallocate the element being overwritten.
95  * @param self Int8ArrayList handle
96  * @param index Element index
97  * @param element Element's new value
98  */
99  ESR_ReturnCode(*set)(struct Int8ArrayList_t* self, size_t index, asr_int8_t element);
100
101  /**
102  * Returns a clone of the Int8ArrayList.
103  * @param self Int8ArrayList handle
104   * @param clone [out] Clone of the Int8ArrayList (created externally, populated
105   *                    internally)
106  */
107  ESR_ReturnCode(*clone)(struct Int8ArrayList_t* self, struct Int8ArrayList_t* clone);
108
109  /**
110   * Converts the Int8ArrayList to a static array.
111   * The use of the Int8ArrayList handle is undefined past this point.
112   *
113   * @param self Int8ArrayList handle
114   * @param newArray Pointer to resulting array
115   */
116  ESR_ReturnCode(*toStaticArray)(struct Int8ArrayList_t* self, asr_int8_t** newArray);
117
118  /**
119  * Destroys the Int8ArrayList.
120  * @param self Int8ArrayList handle
121  */
122  ESR_ReturnCode(*destroy)(struct Int8ArrayList_t* self);
123}
124Int8ArrayList;
125
126/**
127 * Creates a new Int8ArrayList.
128 *
129 * @param self ArrayList handle
130 */
131ESR_SHARED_API ESR_ReturnCode Int8ArrayListCreate(Int8ArrayList** self);
132
133/**
134 * Creates a new Int8ArrayList from the supplied static array.
135 * The static array may not be used past this point.
136 *
137 * @param value Initial value
138 * @param self Int8ArrayList handle
139 */
140ESR_SHARED_API ESR_ReturnCode Int8ArrayListImport(asr_int8_t* value, Int8ArrayList** self);
141
142/**
143 * Adds element to list.
144 *
145 * @param self Int8ArrayList handle
146 * @param element Element to be added
147 */
148ESR_SHARED_API ESR_ReturnCode Int8ArrayListAdd(Int8ArrayList* self, asr_int8_t element);
149
150/**
151 * Removes element from list.
152 *
153 * @param self Int8ArrayList handle
154 * @param element Element to be removed
155 */
156ESR_SHARED_API ESR_ReturnCode Int8ArrayListRemove(Int8ArrayList* self, asr_int8_t element);
157
158/**
159 * Removes all elements from list.
160 *
161 * @param self Int8ArrayList handle
162 */
163ESR_SHARED_API ESR_ReturnCode Int8ArrayListRemoveAll(Int8ArrayList* self);
164
165/**
166 * Indicates if element is contained within the list.
167 *
168 * @param self Int8ArrayList handle
169 * @param element Element to check for
170 * @param exists True if element was found
171 */
172ESR_SHARED_API ESR_ReturnCode Int8ArrayListContains(Int8ArrayList* self, asr_int8_t element, ESR_BOOL* exists);
173
174/**
175 * Returns array size.
176 *
177 * @param self Int8ArrayList handle
178 * @param size Returned size
179 */
180ESR_SHARED_API ESR_ReturnCode Int8ArrayListGetSize(Int8ArrayList* self, size_t* size);
181
182/**
183 * Returns the element at the specified index.
184 *
185 * @param self Int8ArrayList handle
186 * @param index Element index
187 * @param element Element being returned
188 */
189ESR_SHARED_API ESR_ReturnCode Int8ArrayListGet(Int8ArrayList* self, size_t index, asr_int8_t* element);
190
191/**
192 * Sets the element at the specified index.
193 *
194 * NOTE: Does *not* deallocate the element being overwritten.
195 * @param self Int8ArrayList handle
196 * @param index Element index
197 * @param element Element's new value
198 */
199ESR_SHARED_API ESR_ReturnCode Int8ArrayListSet(Int8ArrayList* self, size_t index, asr_int8_t element);
200
201/**
202 * Converts the Int8ArrayList to a static array.
203 * The Int8ArrayList handle may not be used past this point.
204 *
205 * @param self Int8ArrayList handle
206 * @param newArray Pointer to resulting array
207 */
208ESR_SHARED_API ESR_ReturnCode Int8ArrayListToStaticArray(Int8ArrayList* self, asr_int8_t** newArray);
209
210/**
211 * Returns a clone of the Int8ArrayList.
212 * @param self Int8ArrayList handle
213 * @param clone [out] Clone of the Int8ArrayList (created externally, populated
214 *                    internally)
215 */
216ESR_SHARED_API ESR_ReturnCode Int8ArrayListClone(Int8ArrayList* self, Int8ArrayList* clone);
217
218/**
219 * Destroys an Int8ArrayList.
220 *
221 * @param self Int8ArrayList handle
222 */
223ESR_SHARED_API ESR_ReturnCode Int8ArrayListDestroy(Int8ArrayList* self);
224
225/**
226 * @}
227 */
228
229
230#endif /* __INT8ARRAYLIST_H */
231