//
// aegis - project change supervisor
// Copyright (C) 1994, 2003-2008 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
rpt_stmt::rpt_stmt() :
child(0),
nchild(0),
nchild_max(0)
{
}
rpt_stmt::~rpt_stmt()
{
delete [] child;
child = 0;
nchild = 0;
nchild_max = 0;
}
void
rpt_stmt::append(const pointer &sp)
{
if (nchild >= nchild_max)
{
size_t new_nchild_max = nchild_max * 2 + 4;
pointer *new_child = new pointer [new_nchild_max];
for (size_t j = 0; j < nchild; ++j)
new_child[j] = child[j];
delete [] child;
child = new_child;
nchild_max = new_nchild_max;
}
child[nchild++] = sp;
}
void
rpt_stmt::prepend(const pointer &sp)
{
if (nchild >= nchild_max)
{
size_t new_nchild_max = nchild_max * 2 + 4;
pointer *new_child = new pointer [new_nchild_max];
for (size_t j = 0; j < nchild; ++j)
new_child[j + 1] = child[j];
delete [] child;
child = new_child;
nchild_max = new_nchild_max;
}
else
{
for (size_t j = nchild; j > 0; --j)
child[j] = child[j - 1];
}
nchild++;
child[0] = sp;
}
rpt_stmt::pointer
rpt_stmt::nth_child(size_t n)
const
{
if (n >= nchild)
return pointer();
return child[n];
}