// 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 #include #include #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* refs) const; void CleanMemory(); bool HasObjectParsed(uint32_t obj_num) const; UnownedPtr validator_; UnownedPtr holder_; MaybeOwned root_; std::set parsed_objnums_; std::stack non_parsed_objects_; }; #endif // CORE_FPDFAPI_PARSER_CPDF_OBJECT_AVAIL_H_