1 //========================================================================
5 // Copyright 1996-2003 Glyph & Cog, LLC
7 //========================================================================
9 //========================================================================
11 // Modified under the Poppler project - http://poppler.freedesktop.org
13 // All changes made under the Poppler project to this file are licensed
14 // under GPL version 2 or later
16 // Copyright (C) 2005 Kristian Høgsberg <krh@redhat.com>
17 // Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it>
18 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
19 // Copyright (C) 2013 Albert Astals Cid <aacid@kde.org>
21 // To see a description of the changes please see the Changelog file that
22 // came with your tarball or type make ChangeLog if you are building from git
24 //========================================================================
28 #ifdef USE_GCC_PRAGMAS
29 #pragma implementation
39 # define arrayLocker() MutexLocker locker(&mutex)
41 # define arrayLocker()
43 //------------------------------------------------------------------------
45 //------------------------------------------------------------------------
47 Array::Array(XRef
*xrefA
) {
60 for (i
= 0; i
< length
; ++i
)
64 gDestroyMutex(&mutex
);
68 Object
*Array::copy(XRef
*xrefA
, Object
*obj
) {
70 obj
->initArray(xrefA
);
71 for (int i
= 0; i
< length
; ++i
) {
73 obj
->arrayAdd(elems
[i
].copy(&obj1
));
90 void Array::add(Object
*elem
) {
98 elems
= (Object
*)greallocn(elems
, size
, sizeof(Object
));
100 elems
[length
] = *elem
;
104 void Array::remove(int i
) {
106 if (i
< 0 || i
>= length
) {
114 memmove( elems
+ i
, elems
+ i
+ 1, sizeof(elems
[0]) * (length
- i
) );
117 Object
*Array::get(int i
, Object
*obj
, int recursion
) {
118 if (i
< 0 || i
>= length
) {
122 return obj
->initNull();
125 return elems
[i
].fetch(xref
, obj
, recursion
);
128 Object
*Array::getNF(int i
, Object
*obj
) {
129 if (i
< 0 || i
>= length
) {
133 return obj
->initNull();
136 return elems
[i
].copy(obj
);
139 GBool
Array::getString(int i
, GooString
*string
)
143 if (getNF(i
, &obj
)->isString()) {
145 string
->append(obj
.getString());