//
// aegis - project change supervisor
// Copyright (C) 2001-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 // for assert
#include
#include
#include
#include
#include
rpt_value_pconf::~rpt_value_pconf()
{
change_free(cp);
}
rpt_value_pconf::rpt_value_pconf(const change::pointer &a_cp) :
cp(change_copy(a_cp))
{
}
rpt_value::pointer
rpt_value_pconf::create(const change::pointer &a_cp)
{
return pointer(new rpt_value_pconf(a_cp));
}
void
rpt_value_pconf::grab()
const
{
//
// construct the project config file's value, assuming it exists
//
trace(("rpt_value_pconf::grab(this = %08lX)\n{\n", (long)this));
assert(!value);
assert(cp);
pconf_ty *pconf_data = change_pconf_get(cp, 0);
//
// create the result value
//
value = pconf_type.convert(&pconf_data);
assert(value);
assert(dynamic_cast(value.get()));
trace(("value = %08lX;\n", (long)value.get()));
trace(("}\n"));
}
rpt_value::pointer
rpt_value_pconf::lookup(const rpt_value::pointer &rhs, bool lval)
const
{
trace(("rpt_value_pconf::lookup(this = %08lX)\n", (long)this));
if (!value)
grab();
assert(value);
if (value->is_an_error())
return value;
return value->lookup(rhs, lval);
}
rpt_value::pointer
rpt_value_pconf::keys()
const
{
trace(("rpt_value_pconf::keys(this = %08lX)\n", (long)this));
if (!value)
grab();
assert(value);
if (value->is_an_error())
return value;
return value->keys();
}
rpt_value::pointer
rpt_value_pconf::count()
const
{
trace(("rpt_value_pconf::count(this = %08lX)\n", (long)this));
if (!value)
grab();
assert(value);
if (value->is_an_error())
return value;
return value->count();
}
const char *
rpt_value_pconf::type_of()
const
{
trace(("rpt_value_pconf::type_of(this = %08lX)\n", (long)this));
if (!value)
grab();
assert(value);
return value->type_of();
}
rpt_value::pointer
rpt_value_pconf::undefer_or_null()
const
{
trace(("rpt_value_pconf::undefer(this = %08lX)\n", (long)this));
if (!value)
grab();
assert(value);
return value;
}
const char *
rpt_value_pconf::name()
const
{
return "pconf";
}
bool
rpt_value_pconf::is_a_struct()
const
{
if (!value)
return true;
return value->is_a_struct();
}