source: trunk/poppler/mypoppler/poppler/Dict.cc @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 2.3 KB
Line 
1//========================================================================
2//
3// Dict.cc
4//
5// Copyright 1996-2003 Glyph & Cog, LLC
6//
7//========================================================================
8
9#include <config.h>
10
11#ifdef USE_GCC_PRAGMAS
12#pragma implementation
13#endif
14
15#include <stddef.h>
16#include <string.h>
17#include "goo/gmem.h"
18#include "Object.h"
19#include "UGooString.h"
20#include "XRef.h"
21#include "Dict.h"
22
23//------------------------------------------------------------------------
24// Dict
25//------------------------------------------------------------------------
26
27Dict::Dict(XRef *xrefA) {
28  xref = xrefA;
29  entries = NULL;
30  size = length = 0;
31  ref = 1;
32}
33
34Dict::~Dict() {
35  int i;
36
37  for (i = 0; i < length; ++i) {
38    delete entries[i].key;
39    entries[i].val.free();
40  }
41  gfree(entries);
42}
43
44void Dict::add(const UGooString &key, Object *val) {
45  if (length == size) {
46    if (length == 0) {
47      size = 8;
48    } else {
49      size *= 2;
50    }
51    entries = (DictEntry *)greallocn(entries, size, sizeof(DictEntry));
52  }
53  entries[length].key = new UGooString(key);
54  entries[length].val = *val;
55  ++length;
56}
57
58inline DictEntry *Dict::find(const UGooString &key) {
59  int i;
60
61  for (i = 0; i < length; ++i) {
62    if (!key.cmp(entries[i].key))
63      return &entries[i];
64  }
65  return NULL;
66}
67
68GBool Dict::is(char *type) {
69  DictEntry *e;
70
71  return (e = find("Type")) && e->val.isName(type);
72}
73
74Object *Dict::lookup(const UGooString &key, Object *obj) {
75  DictEntry *e;
76
77  return (e = find(key)) ? e->val.fetch(xref, obj) : obj->initNull();
78}
79
80Object *Dict::lookupNF(const UGooString &key, Object *obj) {
81  DictEntry *e;
82
83  return (e = find(key)) ? e->val.copy(obj) : obj->initNull();
84}
85
86GBool Dict::lookupInt(const char *key, const char *alt_key, int *value)
87{
88  Object obj1;
89  GBool success = gFalse;
90 
91  lookup ((char *) key, &obj1);
92  if (obj1.isNull () && alt_key != NULL) {
93    obj1.free ();
94    lookup ((char *) alt_key, &obj1);
95  }
96  if (obj1.isInt ()) {
97    *value = obj1.getInt ();
98    success = gTrue;
99  }
100
101  obj1.free ();
102
103  return success;
104}
105
106UGooString *Dict::getKey(int i) {
107  return entries[i].key;
108}
109
110Object *Dict::getVal(int i, Object *obj) {
111  return entries[i].val.fetch(xref, obj);
112}
113
114Object *Dict::getValNF(int i, Object *obj) {
115  return entries[i].val.copy(obj);
116}
Note: See TracBrowser for help on using the repository browser.