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