src/GlobalRoots.cpp
author David Anderson <dvander@alliedmods.net>
Tue Dec 25 16:32:06 2012 -0800 (2012-12-25)
changeset 238 e9bec7549c28
parent 195 c1ba166f3fc4
child 251 ca99a81745fe
permissions -rw-r--r--
Preparatory refactoring for const types.
ds@127
     1
/* vim: set ts=4 sw=4 tw=99 et:
ds@127
     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
#include "GlobalRoots.h"
dvander@61
    20
#include "Zone.h"
danderson@92
    21
#include "Spaces-inl.h"
danderson@92
    22
#include "Heap-inl.h"
dvander@61
    23
dvander@61
    24
using namespace ke;
dvander@61
    25
dvander@61
    26
GlobalRoots::GlobalRoots(Zone *zone)
dvander@61
    27
  : zone_(zone)
dvander@61
    28
{
dvander@61
    29
}
dvander@61
    30
dvander@61
    31
GlobalRoots::~GlobalRoots()
dvander@61
    32
{
dvander@61
    33
    InlineList<HeapRoot>::iterator iter = roots_.begin();
dvander@61
    34
    while (iter != roots_.end()) {
dvander@65
    35
		HeapRoot *root = *iter;
dvander@61
    36
        iter = roots_.erase(iter);
dvander@65
    37
		delete root;
dvander@61
    38
    }
dvander@61
    39
}
dvander@61
    40
dvander@61
    41
bool
dvander@61
    42
GlobalRoots::initialize()
dvander@61
    43
{
dvander@61
    44
    return true;
dvander@61
    45
}
dvander@61
    46
dvander@61
    47
void
dvander@61
    48
GlobalRoots::accept(VirtualObjectVisitor *visitor)
dvander@61
    49
{
dvander@61
    50
    for (InlineList<HeapRoot>::iterator iter = roots_.begin(); iter != roots_.end(); iter++)
dvander@61
    51
        visitor->visit(&iter->obj);
dvander@61
    52
}
dvander@61
    53
dvander@61
    54
HeapRoot *
dvander@195
    55
GlobalRoots::create()
dvander@61
    56
{
dvander@61
    57
    HeapRoot *root = new HeapRoot();
dvander@69
    58
    if (!root) {
dvander@69
    59
        ZONE()->reportOutOfMemory();
dvander@61
    60
        return NULL;
dvander@69
    61
    }
dvander@61
    62
dvander@195
    63
    root->obj = NULL;
dvander@61
    64
dvander@61
    65
    roots_.append(root);
dvander@61
    66
    return root;
dvander@61
    67
}
dvander@61
    68
dvander@61
    69
void
dvander@195
    70
GlobalRoots::destroy(HeapRoot *root)
dvander@61
    71
{
dvander@195
    72
    roots_.remove(root);
dvander@195
    73
    delete root;
dvander@61
    74
}