696 lines
No EOL
33 KiB
HTML
696 lines
No EOL
33 KiB
HTML
<?xml version="1.0"?>
|
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
|
|
|
<xsl:output method="text" indent="no"/>
|
|
|
|
<!-- Output : can be 'header', 'cpp' or 'php' -->
|
|
<xsl:param name="output"/> <!-- select="'header' -->
|
|
<xsl:param name="side"/> <!-- The generation side (my be 'server' or 'client' -->
|
|
<xsl:param name="filename"/>
|
|
<xsl:param name="bank"/> <!-- The database bank to generate (must meet an entry in <bank_superclass> banks) -->
|
|
|
|
<!-- A special template applyer that is mode aware -->
|
|
<xsl:template name="myApplyTemplate">
|
|
<xsl:choose>
|
|
<xsl:when test="$output = 'header'">
|
|
<xsl:if test="$side = 'server'">
|
|
<xsl:apply-templates mode="header-server"/>
|
|
</xsl:if>
|
|
<xsl:if test="$side = 'client'">
|
|
<xsl:apply-templates mode="header-client"/>
|
|
</xsl:if>
|
|
</xsl:when>
|
|
<xsl:when test="$output = 'cpp'">
|
|
<xsl:if test="$side = 'server'">
|
|
<xsl:apply-templates mode="cpp-server"/>
|
|
</xsl:if>
|
|
<xsl:if test="$side = 'client'">
|
|
<xsl:apply-templates mode="cpp-client"/>
|
|
</xsl:if>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<!-- some stupide template to remove unwanted text from output -->
|
|
<xsl:template match="text()" mode="cpp-server"/>
|
|
<xsl:template match="text()" mode="header-server"/>
|
|
<xsl:template match="text()" mode="cpp-client"/>
|
|
<xsl:template match="text()" mode="header-client"/>
|
|
|
|
<xsl:template match="/"><xsl:call-template name="myApplyTemplate"/></xsl:template>
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### Recursive build of full class name ####### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="makeFullClassName">
|
|
<xsl:if test="name() = 'branch'">
|
|
<xsl:for-each select="..">
|
|
<xsl:call-template name="makeFullClassName"/>
|
|
</xsl:for-each>
|
|
<xsl:text>::</xsl:text><xsl:call-template name="makeBranchType"/>
|
|
</xsl:if>
|
|
<xsl:if test="name() = 'database_description'">
|
|
<xsl:text>CBankAccessor_</xsl:text><xsl:value-of select="$bank"/>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### Root template matcher (cpp-server) ####### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template match="database_description" mode="cpp-server">
|
|
/////////////////////////////////////////////////////////////////
|
|
// WARNING : this is a generated file, don't change it !
|
|
/////////////////////////////////////////////////////////////////
|
|
#include "stdpch.h"
|
|
#include "database_<xsl:value-of select="translate($bank, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/>.h"
|
|
|
|
<xsl:for-each select="bank_superclass/bank[@name = $bank]">
|
|
<xsl:variable name="bankName" select="@name"/>
|
|
|
|
TCDBBank CBankAccessor_<xsl:value-of select="@name"/>::BankTag;
|
|
|
|
<!-- generate root class members-->
|
|
<xsl:for-each select="/*/branch[@bank = $bankName and not(@clientonly)]">
|
|
<xsl:call-template name="makeFullClassName"/><xsl:text> </xsl:text><xsl:for-each select=".."><xsl:call-template name="makeFullClassName"/></xsl:for-each>::_<xsl:call-template name="makeBranchName"/><xsl:if test="@count">[<xsl:value-of select="@count"/>]</xsl:if><xsl:text>;
|
|
</xsl:text>
|
|
</xsl:for-each>
|
|
|
|
<!-- generate init method -->
|
|
void CBankAccessor_<xsl:value-of select="@name"/>::init()
|
|
{
|
|
static bool inited = false;
|
|
if (!inited)
|
|
{
|
|
// retreive the bank structure
|
|
CCDBStructBanks *bank = CCDBStructBanks::instance();
|
|
BankTag = CCDBStructBanks::readBankName("<xsl:value-of select="$bankName"/>");
|
|
|
|
ICDBStructNode *node;
|
|
|
|
// branch init
|
|
<xsl:for-each select="/*/branch[@bank = $bankName and not(@clientonly)]">
|
|
<xsl:if test="not(@count)">
|
|
node = bank->getICDBStructNodeFromName( BankTag, "<xsl:value-of select="@name"/>" );
|
|
nlassert(node != NULL);
|
|
// call sub branch init
|
|
_<xsl:call-template name="makeBranchName"/>.init(node);
|
|
</xsl:if>
|
|
<xsl:if test="@count">
|
|
for (uint i=0; i<<xsl:value-of select="@count"/>; ++i)
|
|
{
|
|
node = bank->getICDBStructNodeFromName( BankTag, NLMISC::toString("<xsl:value-of select="@name"/>%u", i) );
|
|
nlassert(node != NULL);
|
|
// call sub branch init
|
|
_<xsl:call-template name="makeBranchName"/>[i].init(node, i);
|
|
}
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
|
|
inited = true;
|
|
}
|
|
}
|
|
<!-- generate inner classes methods -->
|
|
<xsl:for-each select="/*/branch[@bank = $bankName and not(@clientonly)]">
|
|
<xsl:call-template name="branch_cpp"/>
|
|
</xsl:for-each>
|
|
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### Root template matcher ####### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template match="database_description" mode="header-server">
|
|
|
|
#ifndef INCLUDED_<xsl:value-of select="concat($filename, '_', $bank)"/>_H
|
|
#define INCLUDED_<xsl:value-of select="concat($filename, '_', $bank)"/>_H
|
|
/////////////////////////////////////////////////////////////////
|
|
// WARNING : this is a generated file, don't change it !
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
#include "nel/misc/string_common.h"
|
|
#include "cdb_group.h"
|
|
#include "player_manager/cdb.h"
|
|
#include "player_manager/cdb_synchronised.h"
|
|
|
|
<xsl:for-each select="bank_superclass/bank[@name = $bank]">
|
|
<xsl:for-each select="include">
|
|
#include "<xsl:value-of select="@file"/>"
|
|
</xsl:for-each>
|
|
<!-- copy any verbatime code -->
|
|
<xsl:value-of select="verbatime"/>
|
|
</xsl:for-each>
|
|
|
|
<![CDATA[
|
|
#ifndef _SET_PROP_ACCESSOR_
|
|
#define _SET_PROP_ACCESSOR_
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, bool value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, uint8 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, uint16 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, uint32 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, uint64 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, sint8 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, sint16 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, sint32 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, sint64 value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value), forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, const std::string &value, bool forceSending = false)
|
|
{
|
|
db.x_setPropString(node, value, forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, const ucstring &value, bool forceSending = false)
|
|
{
|
|
db.x_setPropString(node, value, forceSending);
|
|
}
|
|
inline void _setProp(CCDBSynchronised &db, ICDBStructNode *node, const NLMISC::CSheetId &value, bool forceSending = false)
|
|
{
|
|
db.x_setProp(node, uint64(value.asInt()), forceSending);
|
|
}
|
|
|
|
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, bool &value)
|
|
{
|
|
value = db.x_getProp(node) != 0;
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, uint8 &value)
|
|
{
|
|
value = uint8(db.x_getProp(node));
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, uint16 &value)
|
|
{
|
|
value = uint16(db.x_getProp(node));
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, uint32 &value)
|
|
{
|
|
value = uint32(db.x_getProp(node));
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, uint64 &value)
|
|
{
|
|
value = db.x_getProp(node);
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, sint8 &value)
|
|
{
|
|
value = uint8(db.x_getProp(node));
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, sint16 &value)
|
|
{
|
|
value = uint16(db.x_getProp(node));
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, sint32 &value)
|
|
{
|
|
value = uint32(db.x_getProp(node));
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, sint64 &value)
|
|
{
|
|
value = db.x_getProp(node);
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, std::string &value)
|
|
{
|
|
value = db.x_getPropString(node);
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, ucstring &value)
|
|
{
|
|
value = db.x_getPropUcstring(node);
|
|
}
|
|
inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, NLMISC::CSheetId &value)
|
|
{
|
|
value = uint32(db.x_getProp(node));
|
|
}
|
|
#endif // _SET_PROP_ACCESSOR_
|
|
]]>
|
|
|
|
<xsl:for-each select="bank_superclass/bank[@name = $bank]">
|
|
<xsl:variable name="bankName" select="@name"/>
|
|
class CBankAccessor_<xsl:value-of select="@name"/> : public <xsl:value-of select="@class"/>
|
|
{
|
|
public:
|
|
static TCDBBank BankTag;
|
|
|
|
<!-- generate inner classes -->
|
|
<xsl:for-each select="/*/branch[@bank = $bankName and not(@clientonly)]">
|
|
<xsl:call-template name="branch_header"/>
|
|
</xsl:for-each>
|
|
|
|
<!-- generate branch class instance -->
|
|
<xsl:for-each select="/*/branch[@bank = $bankName and not(@clientonly)]">
|
|
static <xsl:call-template name="makeBranchType"/> _<xsl:call-template name="makeBranchName"/><xsl:if test="@count">[<xsl:value-of select="@count"/>]</xsl:if><xsl:text>;
|
|
</xsl:text>
|
|
</xsl:for-each>
|
|
|
|
public:
|
|
|
|
// Constructor
|
|
CBankAccessor_<xsl:value-of select="@name"/>()
|
|
{
|
|
// make sure the static tree is initialised (some kind of lazy initialisation)
|
|
init();
|
|
|
|
// init the base class
|
|
<xsl:value-of select="@class"/>::init(BankTag);
|
|
}
|
|
|
|
<!-- generate init method -->
|
|
static void init();
|
|
|
|
<!-- generate branch accessors -->
|
|
<xsl:for-each select="/*/branch[@bank = $bankName and not(@clientonly)]">
|
|
<xsl:call-template name="branchAccess"/>
|
|
</xsl:for-each>
|
|
|
|
};
|
|
</xsl:for-each>
|
|
<xsl:call-template name="myApplyTemplate"/>
|
|
|
|
#endif // INCLUDED_<xsl:value-of select="concat($filename, '_', $bank)"/><xsl:text>_H
|
|
</xsl:text>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### branch template (header) ####### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="branch_header" match="IDONTKNOWWHATSHOULDGOHERE" mode="header-server">
|
|
<xsl:if test="not(@clientonly='1')">
|
|
class <xsl:call-template name="makeBranchType"/>
|
|
{
|
|
public:
|
|
<!-- generate sub class member -->
|
|
<xsl:for-each select="branch[not(@clientonly)]"><xsl:call-template name="branch_header" /></xsl:for-each>
|
|
|
|
private:
|
|
ICDBStructNode *_BranchNode;
|
|
|
|
<!-- generate leaf -->
|
|
<xsl:for-each select="leaf[not(@clientonly)]">
|
|
<xsl:call-template name="leaf"/>
|
|
</xsl:for-each>
|
|
|
|
<!-- generate branch -->
|
|
<xsl:for-each select="branch[not(@clientonly)]">
|
|
<xsl:call-template name="branchInstance"/>
|
|
</xsl:for-each>
|
|
|
|
public:
|
|
void init(ICDBStructNode *parent<xsl:if test="@count">, uint index</xsl:if>);
|
|
|
|
// accessor to branch node
|
|
ICDBStructNode *getCDBNode()
|
|
{
|
|
return _BranchNode;
|
|
}
|
|
|
|
<!-- generate accessors -->
|
|
<xsl:for-each select="leaf[not(@clientonly)]">
|
|
<xsl:call-template name="leafAccess"/>
|
|
</xsl:for-each>
|
|
<xsl:for-each select="branch[not(@clientonly)]">
|
|
<xsl:call-template name="branchAccess"/>
|
|
</xsl:for-each>
|
|
};
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### branch template (cpp) ####### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="branch_cpp">
|
|
<xsl:if test="not(@clientonly='1')">
|
|
|
|
|
|
<!--ICDBStructNode *<xsl:call-template name="makeFullClassName"/>::_BranchNode;-->
|
|
|
|
<!-- generate class members-->
|
|
<!--
|
|
<xsl:for-each select="branch[not(@clientonly)]">
|
|
<xsl:call-template name="makeFullClassName"/><xsl:text> </xsl:text><xsl:for-each select=".."><xsl:call-template name="makeFullClassName"/></xsl:for-each>::_<xsl:call-template name="makeBranchName"/><xsl:if test="@count">[<xsl:value-of select="@count"/>]</xsl:if><xsl:text>;
|
|
</xsl:text>
|
|
</xsl:for-each>
|
|
<xsl:for-each select="leaf[not(@clientonly)]">
|
|
ICDBStructNode *<xsl:for-each select=".."><xsl:call-template name="makeFullClassName"/>::</xsl:for-each>_<xsl:value-of select="@name"/><xsl:if test="@count">[<xsl:value-of select="@count"/>]</xsl:if><xsl:text>;
|
|
</xsl:text>
|
|
</xsl:for-each>
|
|
-->
|
|
|
|
<!-- generate init method -->
|
|
void <xsl:call-template name="makeFullClassName"/>::init(ICDBStructNode *parent<xsl:if test="@count">, uint index</xsl:if>)
|
|
{
|
|
ICDBStructNode *node = parent;
|
|
|
|
_BranchNode = node;
|
|
|
|
// leaf init
|
|
<xsl:for-each select="leaf[not(@clientonly)]">
|
|
<xsl:if test="not(@count)">
|
|
node = parent->getNode( ICDBStructNode::CTextId("<xsl:value-of select="@name"/>"), false );
|
|
nlassert(node != NULL);
|
|
_<xsl:value-of select="@name"/> = node;
|
|
</xsl:if>
|
|
<xsl:if test="@count">
|
|
for (uint i=0; i<<xsl:value-of select="@count"/>; ++i)
|
|
{
|
|
node = parent->getNode( ICDBStructNode::CTextId(NLMISC::toString("<xsl:value-of select="@name"/>%u", i)), false );
|
|
nlassert(node != NULL);
|
|
_<xsl:value-of select="@name"/>[i] = node;
|
|
}
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
|
|
// branch init
|
|
<xsl:for-each select="branch[not(@clientonly)]">
|
|
<xsl:if test="not(@count)">
|
|
node = parent->getNode( ICDBStructNode::CTextId("<xsl:value-of select="@name"/>"), false );
|
|
nlassert(node != NULL);
|
|
_<xsl:call-template name="makeBranchName"/>.init(node);
|
|
</xsl:if>
|
|
<xsl:if test="@count">
|
|
for (uint i=0; i<<xsl:value-of select="@count"/>; ++i)
|
|
{
|
|
node = parent->getNode( ICDBStructNode::CTextId(NLMISC::toString("<xsl:value-of select="@name"/>%u", i)), false );
|
|
nlassert(node != NULL);
|
|
_<xsl:call-template name="makeBranchName"/>[i].init(node, i);
|
|
}
|
|
</xsl:if>
|
|
</xsl:for-each>
|
|
}
|
|
|
|
<!-- generate inner classes methods -->
|
|
<xsl:for-each select="branch[not(@clientonly)]">
|
|
<xsl:call-template name="branch_cpp"/>
|
|
</xsl:for-each>
|
|
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate branch accessor ###### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="branchAccess">
|
|
<xsl:if test="not(@count)">
|
|
<xsl:if test="name(..) = 'database_description'">static </xsl:if><xsl:call-template name="makeBranchType"/> &get<xsl:call-template name="makeBranchName"/>()
|
|
{
|
|
return _<xsl:call-template name="makeBranchName"/>;
|
|
}
|
|
</xsl:if>
|
|
<xsl:if test="@count">
|
|
<xsl:if test="name(..) = 'database_description'">static </xsl:if><xsl:call-template name="makeBranchType"/> &get<xsl:call-template name="makeBranchName"/>(uint32 index)
|
|
{
|
|
nlassert(index < <xsl:value-of select="@count"/>);
|
|
return _<xsl:call-template name="makeBranchName"/>[index];
|
|
}
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate leaf accessor ###### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="leafAccess">
|
|
<xsl:variable name="bankName" select="ancestor::*/@bank"/>
|
|
void set<xsl:value-of select="@name"/>(<xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@class"/> &dbGroup, <xsl:call-template name="makeLeafParamType"><xsl:with-param name="leafType" select="@type"/><xsl:with-param name="cppType" select="@cppType"/></xsl:call-template> value, bool forceSending = false)
|
|
{
|
|
<xsl:if test="not(@cppType) and not(substring(@type, 2) = '1' or substring(@type, 2) = '8' or substring(@type, 2) = '16' or substring(@type, 2) = '32' or substring(@type, 2) = '64')">
|
|
<!-- we can only test validity on simple types that are not of standard bit size-->
|
|
<xsl:if test="(substring(@type, 1, 1) = 'I' or substring(@type, 1, 1) = 'U')">
|
|
<!-- unsigned value -->
|
|
// Check that the value is not out of database precision
|
|
STOP_IF(value > (1<<<xsl:value-of select="substring(@type, 2)"/>)-1, "set<xsl:value-of select="@name"/> : Value out of bound : trying to store "<<value<<" in a unsigned field limited to <xsl:value-of select="substring(@type, 2)"/> bits");
|
|
</xsl:if>
|
|
<xsl:if test="substring(@type, 1, 1) = 'S'">
|
|
<!-- signed value -->
|
|
// Check that the value is not out of database precision
|
|
if (value > 0)
|
|
STOP_IF(value > (1<<(<xsl:value-of select="substring(@type, 2)"/>-1))-1, "set<xsl:value-of select="@name"/> : Value out of bound : trying to store "<<value<<" in a signed field limited to <xsl:value-of select="substring(@type, 2)"/> bits");
|
|
else
|
|
STOP_IF(value < -(1<<(<xsl:value-of select="substring(@type, 2)"/>-1)), "set<xsl:value-of select="@name"/> : Value out of bound : trying to store "<<value<<" in a signed field limited to <xsl:value-of select="substring(@type, 2)"/> bits");
|
|
</xsl:if>
|
|
</xsl:if>
|
|
|
|
_setProp(dbGroup<xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@dbAccessor"/>, _<xsl:value-of select="@name"/>, value, forceSending);
|
|
}
|
|
|
|
<xsl:call-template name="makeLeafParamType"><xsl:with-param name="leafType" select="@type"/><xsl:with-param name="cppType" select="@cppType"/></xsl:call-template> get<xsl:value-of select="@name"/>(const <xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@class"/> &dbGroup)
|
|
{
|
|
<xsl:call-template name="makeLeafType"><xsl:with-param name="leafType" select="@type"/><xsl:with-param name="cppType" select="@cppType"/></xsl:call-template> value;
|
|
_getProp(dbGroup<xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@dbAccessor"/>, _<xsl:value-of select="@name"/>, value);
|
|
|
|
return value;
|
|
}
|
|
<xsl:if test="@type = 'TEXT'">
|
|
<!-- generate int accessor for text type -->
|
|
void set<xsl:value-of select="@name"/>(<xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@class"/> &dbGroup, uint32 stringId, bool forceSending = false)
|
|
{
|
|
_setProp(dbGroup<xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@dbAccessor"/>, _<xsl:value-of select="@name"/>, stringId, forceSending);
|
|
}
|
|
uint32 get<xsl:value-of select="@name"/>_id(const <xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@class"/> &dbGroup)
|
|
{
|
|
uint32 value;
|
|
_getProp(dbGroup<xsl:value-of select="/*/bank_superclass/bank[@name = $bankName]/@dbAccessor"/>, _<xsl:value-of select="@name"/>, value);
|
|
|
|
return value;
|
|
}
|
|
</xsl:if>
|
|
ICDBStructNode *get<xsl:value-of select="@name"/>CDBNode()
|
|
{
|
|
return _<xsl:value-of select="@name"/>;
|
|
}
|
|
</xsl:template>
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate leaf declaration ###### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="leaf">
|
|
<xsl:if test="@count">
|
|
<xsl:text>ICDBStructNode *_</xsl:text><xsl:value-of select="@name"/>[<xsl:value-of select="@count"/>];
|
|
</xsl:if>
|
|
<xsl:if test="not(@count)">
|
|
<xsl:text>ICDBStructNode *_</xsl:text><xsl:value-of select="@name"/>;
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate branch declaration ###### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="branchInstance">
|
|
<xsl:if test="@count">
|
|
<xsl:text></xsl:text><xsl:call-template name="makeBranchType"/> _<xsl:call-template name="makeBranchName"/>[<xsl:value-of select="@count"/>];
|
|
</xsl:if>
|
|
<xsl:if test="not(@count)">
|
|
<xsl:text></xsl:text><xsl:call-template name="makeBranchType"/> _<xsl:call-template name="makeBranchName"/>;
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<!-- ################################################################## -->
|
|
<!-- ##### generate leaf C++ group name (mainly for anonimous group ## -->
|
|
<!-- ################################################################## -->
|
|
<xsl:template name="makeBranchName">
|
|
<xsl:if test="@name = ''"><xsl:text>Array</xsl:text></xsl:if>
|
|
<xsl:if test="@name != ''"><xsl:value-of select="@name"/></xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="makeBranchType">
|
|
<xsl:if test="@name = ''"><xsl:text>TArray</xsl:text></xsl:if>
|
|
<xsl:if test="@name != ''">T<xsl:value-of select="@name"/></xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate leaf C++ convertion ###### -->
|
|
<!-- ######################################################### -->
|
|
|
|
<xsl:template name="convToUint64">
|
|
<xsl:choose>
|
|
<xsl:when test="@type = 'TEXT'"> <xsl:text>std::string</xsl:text></xsl:when>
|
|
|
|
</xsl:choose>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate C++ param type ###### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="makeLeafParamType">
|
|
<xsl:param name="leafType"/>
|
|
<xsl:param name="cppType"/>
|
|
|
|
<xsl:if test="$cppType = 'TEXT'"><xsl:text>const </xsl:text></xsl:if>
|
|
<xsl:call-template name="makeLeafType"><xsl:with-param name="leafType" select="$leafType"/><xsl:with-param name="cppType" select="$cppType"/></xsl:call-template>
|
|
<xsl:if test="$cppType = 'TEXT'"><xsl:text> &</xsl:text></xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- ######################################################### -->
|
|
<!-- ##### generate leaf C++ type ###### -->
|
|
<!-- ######################################################### -->
|
|
<xsl:template name="makeLeafType">
|
|
<xsl:param name="leafType"/>
|
|
<xsl:param name="cppType"/>
|
|
|
|
<xsl:if test="$cppType"><xsl:value-of select="$cppType"/></xsl:if>
|
|
<xsl:if test="not($cppType)">
|
|
<xsl:choose>
|
|
<xsl:when test="$leafType = 'I1'"> <xsl:text>bool</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I2'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I3'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I4'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I5'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I6'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I7'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I8'"> <xsl:text>uint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I9'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I10'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I11'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I12'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I13'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I14'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I15'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I16'"> <xsl:text>uint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I17'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I18'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I19'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I20'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I21'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I22'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I23'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I24'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I25'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I26'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I27'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I28'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I29'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I30'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I31'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I32'"> <xsl:text>uint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I33'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I34'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I35'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I36'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I37'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I38'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I39'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I40'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I41'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I42'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I43'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I44'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I45'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I46'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I47'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I48'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I49'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I50'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I51'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I52'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I53'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I54'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I55'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I56'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I57'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I58'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I59'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I59'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I60'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I61'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I62'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I63'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'I64'"> <xsl:text>uint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S1'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S2'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S3'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S4'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S5'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S6'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S7'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S8'"> <xsl:text>sint8</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S9'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S10'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S11'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S12'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S13'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S14'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S15'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S16'"> <xsl:text>sint16</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S17'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S18'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S19'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S20'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S21'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S22'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S23'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S24'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S25'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S26'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S27'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S28'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S29'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S30'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S31'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S32'"> <xsl:text>sint32</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S33'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S34'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S35'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S36'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S37'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S38'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S39'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S40'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S41'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S42'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S43'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S44'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S45'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S46'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S47'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S48'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S49'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S50'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S51'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S52'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S53'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S54'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S55'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S56'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S57'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S58'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S59'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S59'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S60'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S61'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S62'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S63'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
<xsl:when test="$leafType = 'S64'"> <xsl:text>sint64</xsl:text> </xsl:when>
|
|
|
|
<xsl:when test="$leafType = 'TEXT'"> <xsl:text>ucstring</xsl:text> </xsl:when>
|
|
<xsl:otherwise> <xsl:message terminate="yes">Unsupported leaf type <xsl:value-of select="$leafType"/></xsl:message></xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
</xsl:stylesheet> |