// Copyright 2017 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_ #define CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_ #include <memory> #include <set> #include <stack> #include "core/fpdfapi/parser/cpdf_data_avail.h" #include "core/fxcrt/maybe_owned.h" #include "core/fxcrt/unowned_ptr.h" class CPDF_Object; class CPDF_Reference; class CPDF_IndirectObjectHolder; class CPDF_ReadValidator; // Helper for check availability of object tree. class CPDF_ObjectAvail { public: CPDF_ObjectAvail(CPDF_ReadValidator* validator, CPDF_IndirectObjectHolder* holder, const CPDF_Object* root); CPDF_ObjectAvail(CPDF_ReadValidator* validator, CPDF_IndirectObjectHolder* holder, uint32_t obj_num); virtual ~CPDF_ObjectAvail(); CPDF_DataAvail::DocAvailStatus CheckAvail(); protected: virtual bool ExcludeObject(const CPDF_Object* object) const; private: bool LoadRootObject(); bool CheckObjects(); bool AppendObjectSubRefs(const CPDF_Object* object, std::stack<uint32_t>* refs) const; void CleanMemory(); bool HasObjectParsed(uint32_t obj_num) const; UnownedPtr<CPDF_ReadValidator> validator_; UnownedPtr<CPDF_IndirectObjectHolder> holder_; MaybeOwned<const CPDF_Object> root_; std::set<uint32_t> parsed_objnums_; std::stack<uint32_t> non_parsed_objects_; }; #endif // CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_