Commit c2ab0441b5d2c03a732d68e2ed36a19343ccbb5a

Authored by m-holger
1 parent a7b69751

Refactor QPDF_Array::getJSON

libqpdf/QPDF_Array.cc
@@ -151,20 +151,33 @@ QPDF_Array::unparse() @@ -151,20 +151,33 @@ QPDF_Array::unparse()
151 JSON 151 JSON
152 QPDF_Array::getJSON(int json_version) 152 QPDF_Array::getJSON(int json_version)
153 { 153 {
  154 + static const JSON j_null = JSON::makeNull();
  155 + JSON j_array = JSON::makeArray();
154 if (sparse) { 156 if (sparse) {
155 - JSON j = JSON::makeArray();  
156 - for (int i = 0; i < sp_size; ++i) {  
157 - j.addArrayElement(at(i).getJSON(json_version)); 157 + int next = 0;
  158 + for (auto& item: sp_elements) {
  159 + int key = item.first;
  160 + for (int j = next; j < key; ++j) {
  161 + j_array.addArrayElement(j_null);
  162 + }
  163 + auto og = item.second->getObjGen();
  164 + j_array.addArrayElement(
  165 + og.isIndirect() ? JSON::makeString(og.unparse(' ') + " R")
  166 + : item.second->getJSON(json_version));
  167 + next = ++key;
  168 + }
  169 + for (int j = next; j < sp_size; ++j) {
  170 + j_array.addArrayElement(j_null);
158 } 171 }
159 - return j;  
160 } else { 172 } else {
161 - JSON j = JSON::makeArray();  
162 - size_t size = elements.size();  
163 - for (int i = 0; i < int(size); ++i) {  
164 - j.addArrayElement(at(i).getJSON(json_version)); 173 + for (auto const& item: elements) {
  174 + auto og = item->getObjGen();
  175 + j_array.addArrayElement(
  176 + og.isIndirect() ? JSON::makeString(og.unparse(' ') + " R")
  177 + : item->getJSON(json_version));
165 } 178 }
166 - return j;  
167 } 179 }
  180 + return j_array;
168 } 181 }
169 182
170 QPDFObjectHandle 183 QPDFObjectHandle
libqpdf/QPDF_Null.cc
@@ -50,5 +50,6 @@ QPDF_Null::unparse() @@ -50,5 +50,6 @@ QPDF_Null::unparse()
50 JSON 50 JSON
51 QPDF_Null::getJSON(int json_version) 51 QPDF_Null::getJSON(int json_version)
52 { 52 {
  53 + // If this is updated, QPDF_Array::getJSON must also be updated.
53 return JSON::makeNull(); 54 return JSON::makeNull();
54 } 55 }