src/GlobalRoots.cpp
author Asher Baker <asherkin@gmail.com>
Mon Jun 10 01:04:43 2013 +0100 (2013-06-10)
changeset 263 ba85a47ee414
parent 262 c4b1341297e5
permissions -rw-r--r--
Normalise line endings.
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
{
dvander@61
    28
}
dvander@61
    29
dvander@61
    30
GlobalRoots::~GlobalRoots()
dvander@61
    31
{
dvander@61
    32
    InlineList<HeapRoot>::iterator iter = roots_.begin();
dvander@61
    33
    while (iter != roots_.end()) {
dvander@251
    34
        HeapRoot *root = *iter;
dvander@61
    35
        iter = roots_.erase(iter);
dvander@251
    36
        delete root;
dvander@61
    37
    }
dvander@61
    38
}
dvander@61
    39
dvander@61
    40
bool
dvander@61
    41
GlobalRoots::initialize()
dvander@61
    42
{
dvander@61
    43
    return true;
dvander@61
    44
}
dvander@61
    45
dvander@61
    46
void
dvander@61
    47
GlobalRoots::accept(VirtualObjectVisitor *visitor)
dvander@61
    48
{
dvander@61
    49
    for (InlineList<HeapRoot>::iterator iter = roots_.begin(); iter != roots_.end(); iter++)
dvander@61
    50
        visitor->visit(&iter->obj);
dvander@61
    51
}
dvander@61
    52
dvander@61
    53
HeapRoot *
dvander@195
    54
GlobalRoots::create()
dvander@61
    55
{
dvander@61
    56
    HeapRoot *root = new HeapRoot();
dvander@69
    57
    if (!root) {
dvander@69
    58
        ZONE()->reportOutOfMemory();
dvander@61
    59
        return NULL;
dvander@69
    60
    }
dvander@61
    61
dvander@195
    62
    root->obj = NULL;
dvander@61
    63
dvander@61
    64
    roots_.append(root);
dvander@61
    65
    return root;
dvander@61
    66
}
dvander@61
    67
dvander@61
    68
void
dvander@195
    69
GlobalRoots::destroy(HeapRoot *root)
dvander@61
    70
{
dvander@195
    71
    roots_.remove(root);
dvander@195
    72
    delete root;
dvander@61
    73
}