src/GlobalRoots.h
author David Anderson <dvander@alliedmods.net>
Sat Aug 04 19:33:06 2012 -0700 (2012-08-04)
changeset 147 9c544823d090
parent 126 0ddfc5bd00e2
child 195 c1ba166f3fc4
permissions -rw-r--r--
Structure declaration support.
ds@126
     1
/* vim: set ts=4 sw=4 tw=99 et:
ds@126
     2
 *
dvander@61
     3
 * Copyright (C) 2004-2012 David Anderson
dvander@61
     4
 *
dvander@61
     5
 * This file is part of SourcePawn.
dvander@61
     6
 *
dvander@61
     7
 * SourcePawn is free software: you can redistribute it and/or modify it under
dvander@61
     8
 * the terms of the GNU General Public License as published by the Free
dvander@61
     9
 * Software Foundation, either version 3 of the License, or (at your option)
dvander@61
    10
 * any later version.
dvander@61
    11
 * 
dvander@61
    12
 * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
dvander@61
    13
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@61
    14
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
dvander@61
    15
 *
dvander@61
    16
 * You should have received a copy of the GNU General Public License along with
dvander@61
    17
 * SourcePawn. If not, see http://www.gnu.org/licenses/.
dvander@61
    18
 */
dvander@61
    19
#ifndef _include_ke_global_roots_h_
dvander@61
    20
#define _include_ke_global_roots_h_
dvander@61
    21
danderson@92
    22
#include "Utility.h"
dvander@61
    23
#include "Handles.h"
dvander@61
    24
#include "InlineList.h"
dvander@61
    25
#include "VirtualObjectVisitor.h"
dvander@61
    26
dvander@61
    27
namespace ke {
dvander@61
    28
dvander@61
    29
class Zone;
dvander@61
    30
class Object;
dvander@61
    31
dvander@61
    32
class HeapRoot : public InlineListNode<HeapRoot>
dvander@61
    33
{
dvander@61
    34
  public:
dvander@61
    35
    Object *obj;
dvander@61
    36
    intptr_t refcount;
dvander@61
    37
};
dvander@61
    38
dvander@61
    39
class GlobalRoots
dvander@61
    40
{
dvander@61
    41
    Zone *zone_;
dvander@61
    42
dvander@61
    43
  public:
dvander@61
    44
    GlobalRoots(Zone *zone);
dvander@61
    45
    ~GlobalRoots();
dvander@61
    46
dvander@61
    47
    bool initialize();
dvander@61
    48
dvander@61
    49
    // The caller must immediately incref this.
dvander@61
    50
    HeapRoot *create(Handle<Object> ptr);
dvander@61
    51
dvander@61
    52
    void incref(HeapRoot *root);
dvander@61
    53
    void decref(HeapRoot *root);
dvander@61
    54
dvander@61
    55
    void accept(VirtualObjectVisitor *visitor);
dvander@61
    56
dvander@61
    57
  private:
dvander@61
    58
    InlineList<HeapRoot> roots_;
dvander@61
    59
};
dvander@61
    60
dvander@61
    61
}
dvander@61
    62
dvander@61
    63
#endif // _include_ke_global_roots_h_