Commit e1a0c1f2 authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): сделал переменные node_xx - const

parent 287a274d
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<xsl:choose> <xsl:choose>
<xsl:when test="$GENTYPE='H'"> <xsl:when test="$GENTYPE='H'">
<xsl:if test="normalize-space(@vartype)!='io'">const UniSetTypes::ObjectId <xsl:value-of select="../../@name"/>; /*!&lt; <xsl:value-of select="../../@textname"/> */ <xsl:if test="normalize-space(@vartype)!='io'">const UniSetTypes::ObjectId <xsl:value-of select="../../@name"/>; /*!&lt; <xsl:value-of select="../../@textname"/> */
UniSetTypes::ObjectId node_<xsl:value-of select="../../@name"/>; const UniSetTypes::ObjectId node_<xsl:value-of select="../../@name"/>;
<xsl:if test="normalize-space(@vartype)='in'">const long&amp; </xsl:if> <xsl:if test="normalize-space(@vartype)='in'">const long&amp; </xsl:if>
<xsl:if test="normalize-space(@vartype)!='in'">long </xsl:if> <xsl:if test="normalize-space(@vartype)!='in'">long </xsl:if>
<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; /*!&lt; текущее значение '<xsl:value-of select="../../@name"/>' */ <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; /*!&lt; текущее значение '<xsl:value-of select="../../@name"/>' */
...@@ -657,7 +657,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te ...@@ -657,7 +657,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te
std::string <xsl:value-of select="$CLASSNAME"/>_SK::help() std::string <xsl:value-of select="$CLASSNAME"/>_SK::help()
{ {
ostringstream s; ostringstream s;
// HELP NOT YET!
return std::move(s.str()); return std::move(s.str());
} }
...@@ -681,14 +681,22 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::help() ...@@ -681,14 +681,22 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::help()
<xsl:template name="default-init-variables"> <xsl:template name="default-init-variables">
<xsl:if test="normalize-space(@const)!=''"> <xsl:if test="normalize-space(@const)!=''">
<xsl:if test="normalize-space(@type)='int'"><xsl:value-of select="normalize-space(@name)"/>(0),</xsl:if> <xsl:if test="normalize-space(@type)='int'"><xsl:value-of select="normalize-space(@name)"/>(0),
<xsl:if test="normalize-space(@type)='long'"><xsl:value-of select="normalize-space(@name)"/>(0),</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@type)='float'"><xsl:value-of select="normalize-space(@name)"/>(0),</xsl:if> <xsl:if test="normalize-space(@type)='long'"><xsl:value-of select="normalize-space(@name)"/>(0),
<xsl:if test="normalize-space(@type)='double'"><xsl:value-of select="normalize-space(@name)"/>(0),</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@type)='bool'"><xsl:value-of select="normalize-space(@name)"/>(false),</xsl:if> <xsl:if test="normalize-space(@type)='float'"><xsl:value-of select="normalize-space(@name)"/>(0),
<xsl:if test="normalize-space(@type)='str'"><xsl:value-of select="normalize-space(@name)"/>(""),</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@type)='sensor'"><xsl:value-of select="normalize-space(@name)"/>(DefaultObjectId),</xsl:if> <xsl:if test="normalize-space(@type)='double'"><xsl:value-of select="normalize-space(@name)"/>(0),
<xsl:if test="normalize-space(@type)='object'"><xsl:value-of select="normalize-space(@name)"/>(DefaultObjectId),</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@type)='bool'"><xsl:value-of select="normalize-space(@name)"/>(false),
</xsl:if>
<xsl:if test="normalize-space(@type)='str'"><xsl:value-of select="normalize-space(@name)"/>(""),
</xsl:if>
<xsl:if test="normalize-space(@type)='sensor'"><xsl:value-of select="normalize-space(@name)"/>(DefaultObjectId),
</xsl:if>
<xsl:if test="normalize-space(@type)='object'"><xsl:value-of select="normalize-space(@name)"/>(DefaultObjectId),
</xsl:if>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:template name="init-variables"> <xsl:template name="init-variables">
...@@ -765,7 +773,7 @@ node_<xsl:value-of select="@name"/>(DefaultObjectId), ...@@ -765,7 +773,7 @@ node_<xsl:value-of select="@name"/>(DefaultObjectId),
m_<xsl:value-of select="@name"/>(false), m_<xsl:value-of select="@name"/>(false),
prev_m_<xsl:value-of select="@name"/>(false), prev_m_<xsl:value-of select="@name"/>(false),
</xsl:for-each> </xsl:for-each>
// variables // variables (public and proteced)
<xsl:for-each select="//variables/item"> <xsl:for-each select="//variables/item">
<xsl:if test="normalize-space(@public)!=''"> <xsl:if test="normalize-space(@public)!=''">
<xsl:call-template name="default-init-variables"/> <xsl:call-template name="default-init-variables"/>
...@@ -776,6 +784,7 @@ prev_m_<xsl:value-of select="@name"/>(false), ...@@ -776,6 +784,7 @@ prev_m_<xsl:value-of select="@name"/>(false),
</xsl:if> </xsl:if>
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
// ------------------
active(false), active(false),
<xsl:if test="normalize-space($TESTMODE)!=''"> <xsl:if test="normalize-space($TESTMODE)!=''">
isTestMode(false), isTestMode(false),
...@@ -789,6 +798,7 @@ smReadyTimeout(0), ...@@ -789,6 +798,7 @@ smReadyTimeout(0),
activated(false), activated(false),
askPause(2000), askPause(2000),
forceOut(false), forceOut(false),
// private variables
<xsl:for-each select="//variables/item"> <xsl:for-each select="//variables/item">
<xsl:if test="normalize-space(@private)!=''"> <xsl:if test="normalize-space(@private)!=''">
<xsl:call-template name="default-init-variables"/> <xsl:call-template name="default-init-variables"/>
...@@ -811,6 +821,19 @@ static const std::string init3_str( const std::string&amp; s1, const std::string ...@@ -811,6 +821,19 @@ static const std::string init3_str( const std::string&amp; s1, const std::string
return s3; return s3;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
static UniSetTypes::ObjectId init_node( xmlNode* cnode, const std::string&amp; prop )
{
if( prop.empty() )
return uniset_conf()->getLocalNode();
auto conf = uniset_conf();
if( conf->getProp(cnode,prop).empty() )
return conf->getLocalNode();
return conf->getNodeID(conf->getProp(cnode,prop));
}
// -----------------------------------------------------------------------------
<xsl:value-of select="$CLASSNAME"/>_SK::<xsl:value-of select="$CLASSNAME"/>_SK( ObjectId id, xmlNode* cnode, const std::string&amp; _argprefix ): <xsl:value-of select="$CLASSNAME"/>_SK::<xsl:value-of select="$CLASSNAME"/>_SK( ObjectId id, xmlNode* cnode, const std::string&amp; _argprefix ):
<xsl:if test="normalize-space($BASECLASS)!=''"><xsl:value-of select="normalize-space($BASECLASS)"/>(id),</xsl:if> <xsl:if test="normalize-space($BASECLASS)!=''"><xsl:value-of select="normalize-space($BASECLASS)"/>(id),</xsl:if>
<xsl:if test="normalize-space($BASECLASS)=''">UniSetObject(id),</xsl:if> <xsl:if test="normalize-space($BASECLASS)=''">UniSetObject(id),</xsl:if>
...@@ -818,14 +841,14 @@ static const std::string init3_str( const std::string&amp; s1, const std::string ...@@ -818,14 +841,14 @@ static const std::string init3_str( const std::string&amp; s1, const std::string
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@vartype)!='io'"> <xsl:if test="normalize-space(@vartype)!='io'">
<xsl:value-of select="normalize-space(@name)"/>(uniset_conf()->getSensorID(uniset_conf()->getProp(cnode,"<xsl:value-of select="normalize-space(@name)"/>"))), <xsl:value-of select="normalize-space(@name)"/>(uniset_conf()->getSensorID(uniset_conf()->getProp(cnode,"<xsl:value-of select="normalize-space(@name)"/>"))),
node_<xsl:value-of select="normalize-space(@name)"/>( uniset_conf()->getNodeID(uniset_conf()->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>")) ), node_<xsl:value-of select="normalize-space(@name)"/>(init_node(cnode, "node_<xsl:value-of select="normalize-space(@name)"/>")),
</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@vartype)='in'">in_<xsl:value-of select="@name"/>(priv_in_<xsl:value-of select="@name"/>), <xsl:if test="normalize-space(@vartype)='in'">in_<xsl:value-of select="@name"/>(priv_in_<xsl:value-of select="@name"/>),
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
// Используемые идентификаторы сообщений (имена берутся из конф. файла) // Используемые идентификаторы сообщений (имена берутся из конф. файла)
<xsl:for-each select="//msgmap/item"><xsl:value-of select="normalize-space(@name)"/>(uniset_conf()->getSensorID(uniset_conf()->getProp(cnode,"<xsl:value-of select="normalize-space(@name)"/>"))), <xsl:for-each select="//msgmap/item"><xsl:value-of select="normalize-space(@name)"/>(uniset_conf()->getSensorID(uniset_conf()->getProp(cnode,"<xsl:value-of select="normalize-space(@name)"/>"))),
node_<xsl:value-of select="normalize-space(@name)"/>(uniset_conf()->getNodeID( uniset_conf()->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>"))), node_<xsl:value-of select="normalize-space(@name)"/>(init_node(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>")),
m_<xsl:value-of select="normalize-space(@name)"/>(false), m_<xsl:value-of select="normalize-space(@name)"/>(false),
prev_m_<xsl:value-of select="normalize-space(@name)"/>(false), prev_m_<xsl:value-of select="normalize-space(@name)"/>(false),
</xsl:for-each> </xsl:for-each>
...@@ -896,15 +919,11 @@ end_private(false) ...@@ -896,15 +919,11 @@ end_private(false)
throw Exception( myname + ": Not found ID for (<xsl:value-of select="@name"/>) " + conf->getProp(cnode,"<xsl:value-of select="@name"/>") ); throw Exception( myname + ": Not found ID for (<xsl:value-of select="@name"/>) " + conf->getProp(cnode,"<xsl:value-of select="@name"/>") );
</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@no_check_id)!='1'">
if( node_<xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId ) if( node_<xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId )
{ throw Exception( myname + ": Not found NodeID for (node='node_<xsl:value-of select="normalize-space(@name)"/>') " + conf->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>") );
<xsl:if test="normalize-space(@no_check_id)!='1'"> </xsl:if>
if( !conf->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>").empty() )
throw Exception( myname + ": Not found NodeID for (node='node_<xsl:value-of select="normalize-space(@name)"/>') " + conf->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>") );
</xsl:if>
node_<xsl:value-of select="normalize-space(@name)"/> = conf->getLocalNode();
}
<xsl:if test="normalize-space($VARMAP)='1'"> <xsl:if test="normalize-space($VARMAP)='1'">
<xsl:if test="normalize-space(@vartype)='in'"> <xsl:if test="normalize-space(@vartype)='in'">
...@@ -927,12 +946,7 @@ end_private(false) ...@@ -927,12 +946,7 @@ end_private(false)
} }
if( node_<xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId ) if( node_<xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId )
{ throw Exception( myname + ": Not found Message::NodeID for (node='node_<xsl:value-of select="normalize-space(@name)"/>') " + conf->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>") );
if( !conf->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>").empty() )
throw Exception( myname + ": Not found Message::NodeID for (node='node_<xsl:value-of select="normalize-space(@name)"/>') " + conf->getProp(cnode,"node_<xsl:value-of select="normalize-space(@name)"/>") );
node_<xsl:value-of select="normalize-space(@name)"/> = conf->getLocalNode();
}
</xsl:for-each> </xsl:for-each>
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
......
...@@ -69,7 +69,7 @@ class <xsl:value-of select="$CLASSNAME"/>_SK: ...@@ -69,7 +69,7 @@ class <xsl:value-of select="$CLASSNAME"/>_SK:
// Используемые идентификаторы // Используемые идентификаторы
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
const UniSetTypes::ObjectId <xsl:value-of select="@name"/>; /*!&lt; <xsl:value-of select="@comment"/> */ const UniSetTypes::ObjectId <xsl:value-of select="@name"/>; /*!&lt; <xsl:value-of select="@comment"/> */
UniSetTypes::ObjectId node_<xsl:value-of select="@name"/>; const UniSetTypes::ObjectId node_<xsl:value-of select="@name"/>;
<xsl:if test="normalize-space(@vartype)='io'">#error (uniset-codegen): vartype='io' NO LONGER SUPPORTED! (ignore variable: '<xsl:value-of select="@name"/>') <xsl:if test="normalize-space(@vartype)='io'">#error (uniset-codegen): vartype='io' NO LONGER SUPPORTED! (ignore variable: '<xsl:value-of select="@name"/>')
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
...@@ -77,7 +77,7 @@ class <xsl:value-of select="$CLASSNAME"/>_SK: ...@@ -77,7 +77,7 @@ class <xsl:value-of select="$CLASSNAME"/>_SK:
// Используемые идентификаторы сообщений // Используемые идентификаторы сообщений
<xsl:for-each select="//msgmap/item"> <xsl:for-each select="//msgmap/item">
const UniSetTypes::ObjectId <xsl:value-of select="@name"/>; /*!&lt; <xsl:value-of select="@comment"/> */ const UniSetTypes::ObjectId <xsl:value-of select="@name"/>; /*!&lt; <xsl:value-of select="@comment"/> */
UniSetTypes::ObjectId node_<xsl:value-of select="@name"/>; const UniSetTypes::ObjectId node_<xsl:value-of select="@name"/>;
bool m_<xsl:value-of select="@name"/>; /*!&lt; текущее состояние /> */ bool m_<xsl:value-of select="@name"/>; /*!&lt; текущее состояние /> */
</xsl:for-each> </xsl:for-each>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2016-08-24+03:00 // generate timestamp: 2016-08-25+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2016-08-24+03:00 // generate timestamp: 2016-08-25+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <memory> #include <memory>
#include <iomanip> #include <iomanip>
...@@ -36,8 +36,9 @@ UObject_SK::UObject_SK(): ...@@ -36,8 +36,9 @@ UObject_SK::UObject_SK():
// Используемые идентификаторы сообщений (имена берутся из конф. файла) // Используемые идентификаторы сообщений (имена берутся из конф. файла)
// variables // variables (public and proteced)
// ------------------
active(false), active(false),
idHeartBeat(DefaultObjectId), idHeartBeat(DefaultObjectId),
...@@ -47,6 +48,7 @@ UObject_SK::UObject_SK(): ...@@ -47,6 +48,7 @@ UObject_SK::UObject_SK():
activated(false), activated(false),
askPause(2000), askPause(2000),
forceOut(false), forceOut(false),
// private variables
end_private(false) end_private(false)
{ {
...@@ -66,6 +68,19 @@ static const std::string init3_str( const std::string& s1, const std::string& s2 ...@@ -66,6 +68,19 @@ static const std::string init3_str( const std::string& s1, const std::string& s2
return s3; return s3;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
static UniSetTypes::ObjectId init_node( xmlNode* cnode, const std::string& prop )
{
if( prop.empty() )
return uniset_conf()->getLocalNode();
auto conf = uniset_conf();
if( conf->getProp(cnode, prop).empty() )
return conf->getLocalNode();
return conf->getNodeID(conf->getProp(cnode, prop));
}
// -----------------------------------------------------------------------------
UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argprefix ): UObject_SK::UObject_SK( ObjectId id, xmlNode* cnode, const std::string& _argprefix ):
UniSetObject(id), UniSetObject(id),
// Инициализация идентификаторов (имена берутся из конф. файла) // Инициализация идентификаторов (имена берутся из конф. файла)
......
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