Commit 64059014c9288e740214be8242cac4a29e29284c

Authored by m-holger
Committed by Jay Berkenbilt
1 parent b1eb1a95

Refactor QPDFObjectHandle::shallowCopy

include/qpdf/QPDFObjectHandle.hh
@@ -1628,8 +1628,6 @@ class QPDFObjectHandle @@ -1628,8 +1628,6 @@ class QPDFObjectHandle
1628 void objectWarning(std::string const& warning); 1628 void objectWarning(std::string const& warning);
1629 void assertType(char const* type_name, bool istype); 1629 void assertType(char const* type_name, bool istype);
1630 bool dereference(); 1630 bool dereference();
1631 - void copyObject1(std::set<QPDFObjGen>& visited);  
1632 - void shallowCopyInternal1(QPDFObjectHandle& oh);  
1633 void copyObject( 1631 void copyObject(
1634 std::set<QPDFObjGen>& visited, 1632 std::set<QPDFObjGen>& visited,
1635 bool cross_indirect, 1633 bool cross_indirect,
libqpdf/QPDFObjectHandle.cc
@@ -2200,68 +2200,11 @@ QPDFObjectHandle::hasObjectDescription() @@ -2200,68 +2200,11 @@ QPDFObjectHandle::hasObjectDescription()
2200 QPDFObjectHandle 2200 QPDFObjectHandle
2201 QPDFObjectHandle::shallowCopy() 2201 QPDFObjectHandle::shallowCopy()
2202 { 2202 {
2203 - QPDFObjectHandle result;  
2204 - shallowCopyInternal1(result);  
2205 - return result;  
2206 -}  
2207 -  
2208 -void  
2209 -QPDFObjectHandle::shallowCopyInternal1(QPDFObjectHandle& new_obj)  
2210 -{  
2211 - assertInitialized();  
2212 -  
2213 - if (isStream()) {  
2214 - // Handled bt QPDF_Stream::copy()  
2215 - }  
2216 - new_obj = QPDFObjectHandle(obj->copy(true));  
2217 -  
2218 - std::set<QPDFObjGen> visited;  
2219 - new_obj.copyObject1(visited);  
2220 -}  
2221 -  
2222 -void  
2223 -QPDFObjectHandle::copyObject1(std::set<QPDFObjGen>& visited)  
2224 -{  
2225 - assertInitialized();  
2226 -  
2227 - std::shared_ptr<QPDFObject> new_obj;  
2228 -  
2229 - if (isStream()) {  
2230 - new_obj = obj->copy();  
2231 - }  
2232 -  
2233 - auto cur_og = getObjGen();  
2234 - if (cur_og.getObj() != 0) {  
2235 - if (visited.count(cur_og)) {  
2236 - throw std::runtime_error(  
2237 - "loop detected while converting object from "  
2238 - "indirect to direct");  
2239 - }  
2240 - visited.insert(cur_og);  
2241 - }  
2242 -  
2243 - if (isReserved()) {  
2244 - new_obj = obj->copy();  
2245 - }  
2246 -  
2247 - if (isBool() || isInteger() || isName() || isNull() || isReal() ||  
2248 - isString()) {  
2249 - // copy(true) and copy(false) are the same  
2250 - new_obj = obj->copy();  
2251 - } else if (isArray()) {  
2252 - new_obj = obj->copy();  
2253 - } else if (isDictionary()) {  
2254 - new_obj = obj->copy();  
2255 - } else {  
2256 - throw std::logic_error("QPDFObjectHandle::makeDirectInternal: "  
2257 - "unknown object type");  
2258 - }  
2259 -  
2260 - this->obj = new_obj;  
2261 -  
2262 - if (cur_og.getObj()) {  
2263 - visited.erase(cur_og); 2203 + if (!dereference()) {
  2204 + throw std::logic_error("operation attempted on uninitialized "
  2205 + "QPDFObjectHandle");
2264 } 2206 }
  2207 + return QPDFObjectHandle(obj->copy());
2265 } 2208 }
2266 2209
2267 QPDFObjectHandle 2210 QPDFObjectHandle