// Copyright 2017 The PDFium Authors // 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 #include #include "core/fpdfapi/parser/cpdf_data_avail.h" #include "core/fxcrt/retain_ptr.h" #include "core/fxcrt/unowned_ptr.h" class CPDF_Object; class CPDF_IndirectObjectHolder; class CPDF_ReadValidator; // Helper for check availability of object tree. class CPDF_ObjectAvail { public: CPDF_ObjectAvail(RetainPtr validator, CPDF_IndirectObjectHolder* holder, RetainPtr root); CPDF_ObjectAvail(RetainPtr 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(RetainPtr object, std::stack* refs) const; void CleanMemory(); bool HasObjectParsed(uint32_t obj_num) const; RetainPtr const validator_; UnownedPtr const holder_; RetainPtr root_; std::set parsed_objnums_; std::stack non_parsed_objects_; }; #endif // CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_