//
// aegis - project change supervisor
// Copyright (C) 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
generator_pair::~generator_pair()
{
}
generator_pair::generator_pair(const pointer &a_g1, const pointer &a_g2) :
generator("/dev/null"),
g1(a_g1),
g2(a_g2)
{
}
generator_pair::pointer
generator_pair::create(const pointer &a_g1, const pointer &a_g2)
{
return pointer(new generator_pair(a_g1, a_g2));
}
type::pointer
generator_pair::type_boolean_factory()
{
type::pointer t1 = g1->type_boolean_factory();
type::pointer t2 = g2->type_boolean_factory();
return type_pair::create(this, t1, t2);
}
type::pointer
generator_pair::type_enum_factory(const nstring &name, bool global)
{
return
type_pair::create
(
this,
g1->type_enum_factory(name, global),
g2->type_enum_factory(name, global)
);
}
type::pointer
generator_pair::type_integer_factory()
{
return
type_pair::create
(
this,
g1->type_integer_factory(),
g2->type_integer_factory()
);
}
type::pointer
generator_pair::type_list_factory(const nstring &name, bool global,
const type::pointer &subtype)
{
type_pair *pp = dynamic_cast(subtype.get());
assert(pp);
return
type_pair::create
(
this,
g1->type_list_factory(name, global, pp->get_t1()),
g2->type_list_factory(name, global, pp->get_t2())
);
}
type::pointer
generator_pair::type_real_factory()
{
return
type_pair::create
(
this,
g1->type_real_factory(),
g2->type_real_factory()
);
}
type::pointer
generator_pair::type_string_factory()
{
return
type_pair::create
(
this,
g1->type_string_factory(),
g2->type_string_factory()
);
}
type::pointer
generator_pair::type_structure_factory(const nstring &name, bool global)
{
return
type_pair::create
(
this,
g1->type_structure_factory(name, global),
g2->type_structure_factory(name, global)
);
}
type::pointer
generator_pair::type_time_factory()
{
return
type_pair::create
(
this,
g1->type_time_factory(),
g2->type_time_factory()
);
}
void
generator_pair::generate_file()
{
g1->generate_file();
g2->generate_file();
}
type::pointer
generator_pair::top_level_factory(const type::pointer &subtype)
{
type_pair *pp = dynamic_cast(subtype.get());
assert(pp);
return
type_pair::create
(
this,
g1->top_level_factory(pp->get_t1()),
g2->top_level_factory(pp->get_t2())
);
}
// vim: set ts=8 sw=4 et :