// // aegis - project change supervisor // Copyright (C) 2006-2008, 2012 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #include #include #include #include file_event_list::~file_event_list() { clear(); delete [] item; item = 0; maximum = 0; } file_event_list::file_event_list() : length(0), maximum(0), item(0) { } file_event_list::pointer file_event_list::create() { return pointer(new file_event_list()); } file_event_list::file_event_list(const file_event_list &arg) : length(0), maximum(0), item(0) { push_back(arg); } file_event_list::pointer file_event_list::create(const pointer &arg) { return pointer(new file_event_list(*arg)); } file_event_list & file_event_list::operator=(const file_event_list &arg) { if (this != &arg) { clear(); push_back(arg); } return *this; } void file_event_list::clear() { while (length) { --length; delete item[length]; item[length] = 0; } } void file_event_list::push_back(const file_event_list &arg) { for (size_t j = 0; j < arg.size(); ++j) { push_back(new file_event(*arg[j])); } } void file_event_list::push_back(file_event *fep) { // // The event should be the last on the list. If it isn't, // then a child branch supercedes the sequence. // trace(("file_event_list::push_back(this = %p, fep = %p)\n{\n", this, fep)); while (length > 0 && item[length - 1]->get_when() >= fep->get_when()) { length--; delete item[length]; item[length] = 0; } // // Drop the event onto the end of the list. // if (length >= maximum) { size_t new_maximum = maximum * 2 + 4; file_event **new_item = new file_event * [new_maximum]; for (size_t j = 0; j < length; ++j) new_item[j] = item[j]; delete [] item; item = new_item; maximum = new_maximum; } item[length++] = fep; trace(("}\n")); } // vim: set ts=8 sw=4 et :