You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
1.5 KiB
89 lines
1.5 KiB
//========================================================================
|
|
//
|
|
// Array.cpp
|
|
//
|
|
// Copyright 1996-2003 Glyph & Cog, LLC
|
|
//
|
|
//========================================================================
|
|
|
|
#include <aconf.h>
|
|
|
|
#ifdef USE_GCC_PRAGMAS
|
|
#pragma implementation
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
#include <stddef.h>
|
|
#include "gmem.h"
|
|
#include "Object.h"
|
|
#include "Array.h"
|
|
|
|
//------------------------------------------------------------------------
|
|
// Array
|
|
//------------------------------------------------------------------------
|
|
|
|
Array::Array(XRef *xrefA) {
|
|
xref = xrefA;
|
|
elems = NULL;
|
|
size = length = 0;
|
|
ref = 1;
|
|
}
|
|
|
|
Array::~Array() {
|
|
int i;
|
|
|
|
for (i = 0; i < length; ++i)
|
|
elems[i].free();
|
|
gfree(elems);
|
|
}
|
|
|
|
void Array::add(Object *elem) {
|
|
if (length == size) {
|
|
if (length == 0) {
|
|
size = 8;
|
|
} else {
|
|
size *= 2;
|
|
}
|
|
elems = (Object *)greallocn(elems, size, sizeof(Object));
|
|
}
|
|
elems[length] = *elem;
|
|
++length;
|
|
}
|
|
|
|
Object *Array::get(int i, Object *obj) {
|
|
if (i < 0 || i >= length) {
|
|
#ifdef DEBUG_MEM
|
|
abort();
|
|
#else
|
|
return obj->initNull();
|
|
#endif
|
|
}
|
|
return elems[i].fetch(xref, obj);
|
|
}
|
|
|
|
Object *Array::getNF(int i, Object *obj) {
|
|
if (i < 0 || i >= length) {
|
|
#ifdef DEBUG_MEM
|
|
abort();
|
|
#else
|
|
return obj->initNull();
|
|
#endif
|
|
}
|
|
return elems[i].copy(obj);
|
|
}
|
|
|
|
GBool Array::getString(int i, GString *string)
|
|
{
|
|
Object obj;
|
|
|
|
if (getNF(i, &obj)->isString()) {
|
|
string->clear();
|
|
string->append(obj.getString());
|
|
obj.free();
|
|
return gTrue;
|
|
} else {
|
|
obj.free();
|
|
return gFalse;
|
|
}
|
|
}
|