14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Int8ArrayListImpl.c  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "Int8ArrayList.h"
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "Int8ArrayListImpl.h"
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h"
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h"
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MTAG NULL
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define INITIAL_SIZE 32
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayListCreate(Int8ArrayList** self)
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl;
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl = NEW(Int8ArrayListImpl, MTAG);
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (impl == NULL)
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.add = &Int8ArrayList_Add;
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.contains = &Int8ArrayList_Contains;
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.destroy = &Int8ArrayList_Destroy;
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.get = &Int8ArrayList_Get;
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.getSize = &Int8ArrayList_GetSize;
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.remove = &Int8ArrayList_Remove;
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.removeAll = &Int8ArrayList_RemoveAll;
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.set = &Int8ArrayList_Set;
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.toStaticArray = &Int8ArrayList_ToStaticArray;
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->Interface.clone = &Int8ArrayList_Clone;
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->contents = MALLOC((INITIAL_SIZE + 1) * sizeof(asr_int8_t), MTAG);
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (impl->contents == NULL)
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    FREE(impl);
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_OUT_OF_MEMORY;
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->actualSize = INITIAL_SIZE;
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->virtualSize = 0;
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *self = (Int8ArrayList*) impl;
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayListImport(asr_int8_t* value, Int8ArrayList** self)
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl;
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, Int8ArrayListCreate(self));
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl = (Int8ArrayListImpl*) self;
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->contents = value;
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Add(Int8ArrayList* self, const asr_int8_t element)
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (impl->virtualSize >= impl->actualSize)
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* enlarge buffer */
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    asr_int8_t* temp = REALLOC(impl->contents, (impl->actualSize * 2 + 1) * sizeof(asr_int8_t));
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (temp == NULL)
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      return ESR_OUT_OF_MEMORY;
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    impl->contents = temp;
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    impl->actualSize *= 2;
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->contents[impl->virtualSize] = element;
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ++impl->virtualSize;
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Remove(Int8ArrayList* self, const asr_int8_t element)
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_int8_t* contents = impl->contents; /* cache pointer */
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t virtualSize = impl->virtualSize; /* cache value */
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t i;
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  for (i = 0; i < virtualSize; ++i)
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (contents[i] == element)
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      --virtualSize;
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      break;
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* shift remaining elements back */
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  for (; i < virtualSize; ++i)
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    contents[i] = contents[i+1];
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->virtualSize = virtualSize; /* flush cache */
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (virtualSize <= impl->actualSize / 4)
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    /* shrink buffer */
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    impl->contents = REALLOC(contents, (impl->actualSize / 2 + 1) * sizeof(asr_int8_t));
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    passert(impl->contents != NULL); /* should never fail */
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    impl->actualSize /= 2;
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_RemoveAll(Int8ArrayList* self)
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->virtualSize = 0;
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Contains(Int8ArrayList* self, const asr_int8_t element, ESR_BOOL* exists)
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t i;
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t virtualSize = impl->virtualSize; /* cache value */
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_int8_t* contents = impl->contents; /* cache value */
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  for (i = 0; i < virtualSize; ++i)
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (contents[i] == element)
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      *exists = ESR_TRUE;
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      return ESR_SUCCESS;
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *exists = ESR_FALSE;
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Get(Int8ArrayList* self, size_t index, asr_int8_t* element)
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  passert(index >= 0 && index <= impl->virtualSize);
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *element = impl->contents[index];
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Set(Int8ArrayList* self, size_t index, const asr_int8_t element)
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  passert(index >= 0 && index <= impl->virtualSize);
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->contents[index] = element;
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_GetSize(Int8ArrayList* self, size_t* size)
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *size = impl->virtualSize;
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_ToStaticArray(Int8ArrayList* self, asr_int8_t** newArray)
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  *newArray = impl->contents;
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  impl->contents = NULL; /* prevent free() from deallocating buffer */
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return Int8ArrayList_Destroy(self);
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Clone(Int8ArrayList* self, Int8ArrayList* clone)
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  size_t size, i;
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  asr_int8_t element;
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ESR_ReturnCode rc;
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, clone->removeAll(clone));
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CHK(rc, self->getSize(self, &size));
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  for (i = 0; i < size; ++i)
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHK(rc, self->get(self, i, &element));
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    CHK(rc, clone->add(clone, element));
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return rc;
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode Int8ArrayList_Destroy(Int8ArrayList* self)
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  Int8ArrayListImpl* impl = (Int8ArrayListImpl*) self;
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(impl->contents);
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(impl);
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return ESR_SUCCESS;
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
211