<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!--
// // See license.txt for license information. // // register_impl.xml // // 16-Aug-2003 phamilton Created //
-->

<filedef name="register_impl">
    <filepath>$(filepath)</filepath>
    <extension>.cpp</extension>
    <root>$(root)</root>
    <ignoreobjects>$(ignoreobjects)</ignoreobjects>
    <blocks>
        <namespace name="namespace">
            <identifier>$(lib_namespace)</identifier>
        </namespace>
        <text name="register">
            <content>$(register)</content>
        </text>
        <date name="date">
            <format>%e-%b-%Y</format>
        </date>
<!--
includes for all objects
-->

        <foreachobject name="allincludes">
            <location>$(root)</location>
            <blocks>
                <stringmember name="classname">
                    <membername>classname</membername>
                </stringmember>
                <text name="include">
                    <conditions>
                        <isinlist>
                            <membername>name</membername>
                            <list>$(ignoreobjects)</list>
                            <fail/>
                        </isinlist>
                        <isinlist>
                            <membername>type</membername>
                            <list>[enumeration]</list>
                            <fail/>
                        </isinlist>
                    </conditions>
                    <content>#include "\classname.hpp"\n</content>
                </text>
            </blocks>
            <structure>\include</structure>
        </foreachobject>
<!--
registers for just those objects which are not abstract
-->

        <foreachobject name="allregisters">
            <location>$(root)</location>
            <blocks>
                <namespace name="namespace"/>
                <stringmember name="objectname">
                    <membername>name</membername>
                </stringmember>
                <stringmember name="parentobjectname">
                    <location>parent()</location>
                    <membername>name</membername>
                </stringmember>
                <stringmember name="classname">
                    <membername>classname</membername>
                </stringmember>
                <text name="register">
                    <conditions>
                        <isabstract>
                            <fail/>
                        </isabstract>
                        <isinlist>
                            <membername>name</membername>
                            <list>$(ignoreobjects)</list>
                            <fail/>
                        </isinlist>
                        <isinlist>
                            <membername>type</membername>
                            <list>[enumeration]</list>
                            <fail/>
                        </isinlist>
                    </conditions>
                    <content>\(t)ctx->register_object(new \namespace::\classname("\parentobjectname", "\objectname"));\n</content>
                </text>
            </blocks>
            <structure>\register</structure>
        </foreachobject>
<!--
ref and vector template instantiations for all objects.
-->

        <foreachobject name="alltemplates">
            <location>$(root)</location>
            <blocks>
                <namespace name="namespace"/>
                <stringmember name="objectname">
                    <membername>name</membername>
                </stringmember>
                <stringmember name="classname">
                    <membername>classname</membername>
                </stringmember>
                <text name="template">
                    <conditions>
                        <isinlist>
                            <membername>name</membername>
                            <list>$(ignoreobjects)</list>
                            <fail/>
                        </isinlist>
                        <isinlist>
                            <membername>type</membername>
                            <list>[enumeration]</list>
                            <fail/>
                        </isinlist>
                    </conditions>
                    <content>template <>\(n)bool ph::xmlobj::xmlobj_typed_vector<\namespace::\classname>::correct_type(ph::common::object_base *obj)\n{\n\(t)return dynamic_cast<\namespace::\classname *>(obj) != 0;\n}\(n)template <>\(n)bool ph::xmlobj::xmlobj_typed_ref<\namespace::\classname>::correct_type(ph::common::object_base *obj)\n{\n\(t)return dynamic_cast<\namespace::\classname *>(obj) != 0;\n}\n</content>
                </text>
            </blocks>
            <structure>\template</structure>
        </foreachobject>
    </blocks>
    <structure>\comment=on See license.txt for license information. \register.cpp Generated by tangle. Edit at your own risk! \comment=off #include "\register.hpp" #include "../cppxmlobj/xmlobj_typed_vector.hpp" #include "../cppxmlobj/xmlobj_typed_ref.hpp" \allincludes using namespace \namespace; bool \namespace::\register(ph::xmlobj::xmlobj_context *ctx) { \allregisters return true; } \alltemplates </structure>
</filedef>