moved ../../pdf2swf/xpdf to .
[swftools.git] / lib / xpdf / Array.cc
diff --git a/lib/xpdf/Array.cc b/lib/xpdf/Array.cc
new file mode 100644 (file)
index 0000000..10ded14
--- /dev/null
@@ -0,0 +1,73 @@
+//========================================================================
+//
+// Array.cc
+//
+// 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);
+}