Commit ae78e4d3 authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): добавлен ключ --gen-vmap для генерирования map и функции

позволяющей получить указатель на in_(out_) переменую по ID.
parent 6e0d9a22
...@@ -328,10 +328,17 @@ ...@@ -328,10 +328,17 @@
bool no_snap = {false}; bool no_snap = {false};
VMonitor vmon; VMonitor vmon;
<xsl:if test="normalize-space($VARMAP)='1'">
/*! Получить указатель на переменную храняющую значение, по идентификатору */
long* pvar( UniSetTypes::ObjectId id );
</xsl:if>
</xsl:template> </xsl:template>
<xsl:template name="COMMON-HEAD-PRIVATE"> <xsl:template name="COMMON-HEAD-PRIVATE">
<xsl:if test="normalize-space($VARMAP)='1'">
std::unordered_map&lt;UniSetTypes::ObjectId,long*&gt; vmap;
</xsl:if>
</xsl:template> </xsl:template>
<xsl:template name="COMMON-CC-FILE"> <xsl:template name="COMMON-CC-FILE">
...@@ -454,12 +461,24 @@ bool <xsl:value-of select="$CLASSNAME"/>_SK::checkTestMode() ...@@ -454,12 +461,24 @@ bool <xsl:value-of select="$CLASSNAME"/>_SK::checkTestMode()
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
</xsl:if> </xsl:if>
<xsl:if test="normalize-space($VARMAP)='1'">
long* <xsl:value-of select="$CLASSNAME"/>_SK::getVariable( UniSetTypes::ObjectId id )
{
auto i = vmap.find(id);
if( i!= vmap.end() )
return i->second;
return nullptr;
}
</xsl:if>
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::sigterm( int signo ) void <xsl:value-of select="$CLASSNAME"/>_SK::sigterm( int signo )
{ {
<xsl:if test="normalize-space($BASECLASS)!=''"><xsl:value-of select="normalize-space($BASECLASS)"/>::sigterm(signo);</xsl:if> <xsl:if test="normalize-space($BASECLASS)!=''"><xsl:value-of select="normalize-space($BASECLASS)"/>::sigterm(signo);</xsl:if>
<xsl:if test="normalize-space($BASECLASS)=''">UniSetObject::sigterm(signo);</xsl:if> <xsl:if test="normalize-space($BASECLASS)=''">UniSetObject::sigterm(signo);</xsl:if>
active = false; active = false;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool <xsl:value-of select="$CLASSNAME"/>_SK::activateObject() bool <xsl:value-of select="$CLASSNAME"/>_SK::activateObject()
{ {
...@@ -780,6 +799,10 @@ end_private(false) ...@@ -780,6 +799,10 @@ end_private(false)
node_<xsl:value-of select="normalize-space(@name)"/> = conf->getLocalNode(); node_<xsl:value-of select="normalize-space(@name)"/> = conf->getLocalNode();
} }
<xsl:if test="normalize-space($VARMAP)='1'">
vmap.emplace(<xsl:value-of select="normalize-space(@name)"/>,&amp;<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>);
</xsl:if>
</xsl:for-each> </xsl:for-each>
<xsl:for-each select="//msgmap/item"> <xsl:for-each select="//msgmap/item">
......
...@@ -14,7 +14,7 @@ GENERATED2=TestGenAlone_SK.h TestGenAlone_SK.cc TestGenAlone-main.cc ...@@ -14,7 +14,7 @@ GENERATED2=TestGenAlone_SK.h TestGenAlone_SK.cc TestGenAlone-main.cc
GENUOBJ=UObject_SK.cc UObject_SK.h GENUOBJ=UObject_SK.cc UObject_SK.h
TestGen-main.cc TestGen_SK.cc TestGen_SK.h: ../@PACKAGE@-codegen testgen.src.xml ../*.xsl TestGen-main.cc TestGen_SK.cc TestGen_SK.h: ../@PACKAGE@-codegen testgen.src.xml ../*.xsl
../@PACKAGE@-codegen -l $(top_builddir)/Utilities/codegen --local-include -n TestGen testgen.src.xml ../@PACKAGE@-codegen -l $(top_builddir)/Utilities/codegen --gen-varmap --local-include -n TestGen testgen.src.xml
TestGenAlone-main.cc TestGenAlone_SK.cc TestGenAlone_SK.h: ../@PACKAGE@-codegen testgen-alone.src.xml ../*.xsl TestGenAlone-main.cc TestGenAlone_SK.cc TestGenAlone_SK.h: ../@PACKAGE@-codegen testgen-alone.src.xml ../*.xsl
../@PACKAGE@-codegen -l $(top_builddir)/Utilities/codegen --local-include --alone -n TestGenAlone testgen-alone.src.xml ../@PACKAGE@-codegen -l $(top_builddir)/Utilities/codegen --local-include --alone -n TestGenAlone testgen-alone.src.xml
......
...@@ -9,6 +9,12 @@ TestGen::TestGen( UniSetTypes::ObjectId id, xmlNode* confnode ): ...@@ -9,6 +9,12 @@ TestGen::TestGen( UniSetTypes::ObjectId id, xmlNode* confnode ):
{ {
vmonit(int_var); vmonit(int_var);
vmonit(bool_var); vmonit(bool_var);
long* i = getVariable(input2_s);
if( !i )
cerr << "input2_s NOT FOUND!!!" << endl;
else
cerr << "input2_s=" << (*i) << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
TestGen::~TestGen() TestGen::~TestGen()
......
<?xml version="1.0" encoding="koi8-r"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
name - название класса name - название класса
msgcount - сколько сообщений обрабатывается за один раз msgcount - сколько сообщений обрабатывается за один раз
......
<?xml version="1.0" encoding="koi8-r"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
name - название класса name - название класса
msgcount - сколько сообщений обрабатывается за один раз msgcount - сколько сообщений обрабатывается за один раз
......
...@@ -27,6 +27,7 @@ Valid options are: ...@@ -27,6 +27,7 @@ Valid options are:
-m, --main - filename for main.cc. Default: main.cc -m, --main - filename for main.cc. Default: main.cc
-n, --name - filename for *_SK files (base class implementation). Default: xmlfilename_SK -n, --name - filename for *_SK files (base class implementation). Default: xmlfilename_SK
--ask - Use 'ask' templates. See the documentation. --ask - Use 'ask' templates. See the documentation.
--gen-varmap - generate variable map. For function: long* getVariable(ObjectId)
--alone - Use 'alone' templates. See the documentation. --alone - Use 'alone' templates. See the documentation.
--no-main - Don't generate main.cc --no-main - Don't generate main.cc
...@@ -39,7 +40,7 @@ EOF ...@@ -39,7 +40,7 @@ EOF
} }
#parse command line options #parse command line options
TEMP=`getopt -n $PROG -o h,n:,m:,a,l:,z -l help,name:,main:,no-main,topdir:,path:,alone,ask,no-ask,local:,local-include,add-cc-include,add-hh-include,make-skel:,no-makefile -- "$@"` || exit 1 TEMP=`getopt -n $PROG -o h,n:,m:,a,l:,z -l help,name:,main:,no-main,topdir:,path:,alone,ask,no-ask,local:,local-include,add-cc-include,add-hh-include,make-skel:,no-makefile,gen-varmap -- "$@"` || exit 1
eval set -- "$TEMP" eval set -- "$TEMP"
name= name=
...@@ -68,6 +69,8 @@ skel_m="skel-main.cc" ...@@ -68,6 +69,8 @@ skel_m="skel-main.cc"
skel_xml="skel.src.xml" skel_xml="skel.src.xml"
skel_make="skel-Makefile.am" skel_make="skel-Makefile.am"
varmap=0
while :; do while :; do
case "$1" in case "$1" in
-h|--help) print_usage 0 -h|--help) print_usage 0
...@@ -113,6 +116,10 @@ while :; do ...@@ -113,6 +116,10 @@ while :; do
ask= ask=
;; ;;
--gen-varmap)
varmap=1
;;
-l|--local) -l|--local)
shift shift
xsltdir=$1 xsltdir=$1
...@@ -191,6 +198,7 @@ PARAMS=$( echo \ ...@@ -191,6 +198,7 @@ PARAMS=$( echo \
--stringparam XML_FILENAME "${fname}" \ --stringparam XML_FILENAME "${fname}" \
--stringparam CNAME "${name}" \ --stringparam CNAME "${name}" \
--stringparam LOCALINC "${localinc}" \ --stringparam LOCALINC "${localinc}" \
--stringparam VARMAP "${varmap}" \
$xsltpath \ $xsltpath \
) )
# --stringparam ADD_CC_INC "${add_cc_inc}" \ # --stringparam ADD_CC_INC "${add_cc_inc}" \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment