src/VirtualObjectVisitor.h
author David Anderson <dvander@alliedmods.net>
Tue Jan 01 15:34:07 2013 -0800 (2013-01-01)
changeset 251 ca99a81745fe
parent 195 c1ba166f3fc4
permissions -rw-r--r--
Refactor compilation process around the new concept of packages.
dvander@45
     1
/* vim: set ts=4 sw=4 tw=99 et:
dvander@45
     2
 *
dvander@45
     3
 * Copyright (C) 2012 David Anderson
dvander@45
     4
 *
dvander@195
     5
 * This file is part of SourcePawn.
dvander@45
     6
 *
dvander@195
     7
 * SourcePawn is free software: you can redistribute it and/or modify it under
dvander@45
     8
 * the terms of the GNU General Public License as published by the Free
dvander@45
     9
 * Software Foundation, either version 3 of the License, or (at your option)
dvander@45
    10
 * any later version.
dvander@45
    11
 * 
dvander@195
    12
 * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
dvander@45
    13
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@45
    14
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
dvander@45
    15
 *
dvander@45
    16
 * You should have received a copy of the GNU General Public License along with
dvander@195
    17
 * SourcePawn. If not, see http://www.gnu.org/licenses/.
dvander@45
    18
 */
dvander@52
    19
#ifndef _include_jc_virtual_object_visitor_h_
dvander@52
    20
#define _include_jc_virtual_object_visitor_h_
dvander@45
    21
dvander@59
    22
namespace ke {
dvander@45
    23
dvander@195
    24
class Zone;
dvander@45
    25
class Object;
dvander@45
    26
dvander@45
    27
class VirtualObjectVisitor
dvander@45
    28
{
dvander@45
    29
  public:
dvander@45
    30
    virtual void visit(Object **ptr) = 0;
dvander@45
    31
};
dvander@45
    32
dvander@195
    33
// This is a helper class for automatically rooting C++ objects that need
dvander@195
    34
// special tracing. It is implemented in Zone.
dvander@195
    35
class AutoRooted
dvander@195
    36
{
dvander@195
    37
  public:
dvander@195
    38
    AutoRooted(Zone *zone);
dvander@195
    39
    ~AutoRooted();
dvander@195
    40
dvander@195
    41
    virtual void accept(VirtualObjectVisitor *visitor) = 0;
dvander@195
    42
dvander@195
    43
  private:
dvander@195
    44
    Zone *zone_;
dvander@195
    45
    AutoRooted *prev_;
dvander@195
    46
};
dvander@195
    47
dvander@45
    48
}
dvander@45
    49
dvander@52
    50
#endif // _include_jc_virtual_object_visitor_h_