src/GlobalRoots.h
author David Anderson <danderson@mozilla.com>
Wed Jul 25 00:48:08 2012 -0700 (2012-07-25)
changeset 91 5f4402180204
parent 86 32ad0523b309
child 92 e3974e7360e9
permissions -rw-r--r--
Added clang support. A lot of the motion here is introducing a new offsetof because clang's seems broken?
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
dvander@61
    21
#include "Handles.h"
dvander@61
    22
#include "InlineList.h"
dvander@61
    23
#include "VirtualObjectVisitor.h"
dvander@61
    24
dvander@61
    25
namespace ke {
dvander@61
    26
dvander@61
    27
class Zone;
dvander@61
    28
class Object;
dvander@61
    29
dvander@61
    30
class HeapRoot : public InlineListNode<HeapRoot>
dvander@61
    31
{
dvander@61
    32
  public:
dvander@61
    33
    Object *obj;
dvander@61
    34
    intptr_t refcount;
dvander@61
    35
};
dvander@61
    36
dvander@61
    37
class GlobalRoots
dvander@61
    38
{
dvander@61
    39
    Zone *zone_;
dvander@61
    40
dvander@61
    41
  public:
dvander@61
    42
    GlobalRoots(Zone *zone);
dvander@61
    43
    ~GlobalRoots();
dvander@61
    44
dvander@61
    45
    bool initialize();
dvander@61
    46
dvander@61
    47
    // The caller must immediately incref this.
dvander@61
    48
    HeapRoot *create(Handle<Object> ptr);
dvander@61
    49
dvander@61
    50
    void incref(HeapRoot *root);
dvander@61
    51
    void decref(HeapRoot *root);
dvander@61
    52
dvander@61
    53
    void accept(VirtualObjectVisitor *visitor);
dvander@61
    54
dvander@61
    55
  private:
dvander@61
    56
    InlineList<HeapRoot> roots_;
dvander@61
    57
};
dvander@61
    58
dvander@61
    59
}
dvander@61
    60
dvander@61
    61
#endif // _include_ke_global_roots_h_