dvander@45: /* vim: set ts=4 sw=4 tw=99 et: dvander@45: * dvander@45: * Copyright (C) 2012 David Anderson dvander@45: * dvander@195: * This file is part of SourcePawn. dvander@45: * dvander@195: * SourcePawn is free software: you can redistribute it and/or modify it under dvander@45: * the terms of the GNU General Public License as published by the Free dvander@45: * Software Foundation, either version 3 of the License, or (at your option) dvander@45: * any later version. dvander@45: * dvander@195: * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY dvander@45: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@45: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@45: * dvander@45: * You should have received a copy of the GNU General Public License along with dvander@195: * SourcePawn. If not, see http://www.gnu.org/licenses/. dvander@45: */ dvander@52: #ifndef _include_jc_virtual_object_visitor_h_ dvander@52: #define _include_jc_virtual_object_visitor_h_ dvander@45: dvander@59: namespace ke { dvander@45: dvander@195: class Zone; dvander@45: class Object; dvander@45: dvander@45: class VirtualObjectVisitor dvander@45: { dvander@45: public: dvander@45: virtual void visit(Object **ptr) = 0; dvander@45: }; dvander@45: dvander@195: // This is a helper class for automatically rooting C++ objects that need dvander@195: // special tracing. It is implemented in Zone. dvander@195: class AutoRooted dvander@195: { dvander@195: public: dvander@195: AutoRooted(Zone *zone); dvander@195: ~AutoRooted(); dvander@195: dvander@195: virtual void accept(VirtualObjectVisitor *visitor) = 0; dvander@195: dvander@195: private: dvander@195: Zone *zone_; dvander@195: AutoRooted *prev_; dvander@195: }; dvander@195: dvander@45: } dvander@45: dvander@52: #endif // _include_jc_virtual_object_visitor_h_