ds@127: /* vim: set ts=4 sw=4 tw=99 et: ds@127: * dvander@61: * Copyright (C) 2004-2012 David Anderson dvander@61: * dvander@61: * This file is part of SourcePawn. dvander@61: * dvander@61: * SourcePawn is free software: you can redistribute it and/or modify it under dvander@61: * the terms of the GNU General Public License as published by the Free dvander@61: * Software Foundation, either version 3 of the License, or (at your option) dvander@61: * any later version. dvander@61: * dvander@61: * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY dvander@61: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@61: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@61: * dvander@61: * You should have received a copy of the GNU General Public License along with dvander@61: * SourcePawn. If not, see http://www.gnu.org/licenses/. dvander@61: */ dvander@61: #include "GlobalRoots.h" dvander@61: #include "Zone.h" danderson@92: #include "Spaces-inl.h" danderson@92: #include "Heap-inl.h" dvander@61: dvander@61: using namespace ke; dvander@61: dvander@61: GlobalRoots::GlobalRoots(Zone *zone) dvander@61: : zone_(zone) dvander@61: { dvander@61: } dvander@61: dvander@61: GlobalRoots::~GlobalRoots() dvander@61: { dvander@61: InlineList::iterator iter = roots_.begin(); dvander@61: while (iter != roots_.end()) { dvander@65: HeapRoot *root = *iter; dvander@61: iter = roots_.erase(iter); dvander@65: delete root; dvander@61: } dvander@61: } dvander@61: dvander@61: bool dvander@61: GlobalRoots::initialize() dvander@61: { dvander@61: return true; dvander@61: } dvander@61: dvander@61: void dvander@61: GlobalRoots::accept(VirtualObjectVisitor *visitor) dvander@61: { dvander@61: for (InlineList::iterator iter = roots_.begin(); iter != roots_.end(); iter++) dvander@61: visitor->visit(&iter->obj); dvander@61: } dvander@61: dvander@61: HeapRoot * dvander@195: GlobalRoots::create() dvander@61: { dvander@61: HeapRoot *root = new HeapRoot(); dvander@69: if (!root) { dvander@69: ZONE()->reportOutOfMemory(); dvander@61: return NULL; dvander@69: } dvander@61: dvander@195: root->obj = NULL; dvander@61: dvander@61: roots_.append(root); dvander@61: return root; dvander@61: } dvander@61: dvander@61: void dvander@195: GlobalRoots::destroy(HeapRoot *root) dvander@61: { dvander@195: roots_.remove(root); dvander@195: delete root; dvander@61: }