certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi/scripts GenerateMessages.py CERTI_Network...


From: certi-cvs
Subject: [certi-cvs] certi/scripts GenerateMessages.py CERTI_Network...
Date: Sun, 06 Sep 2009 10:02:02 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      09/09/06 10:02:02

Modified files:
        scripts        : GenerateMessages.py CERTI_NetworkMessage.msg 

Log message:
        Handle the repeated case

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/CERTI_NetworkMessage.msg?cvsroot=certi&r1=1.3&r2=1.4

Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- GenerateMessages.py 5 Sep 2009 21:26:33 -0000       1.17
+++ GenerateMessages.py 6 Sep 2009 10:02:02 -0000       1.18
@@ -19,7 +19,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenerateMessages.py,v 1.17 2009/09/05 21:26:33 erk Exp $
+## $Id: GenerateMessages.py,v 1.18 2009/09/06 10:02:02 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -1052,6 +1052,19 @@
         targetTypeName = self.getTargetTypeName(field.typeid.name)
         
         if field.typeid.name == "onoff":
+            if field.qualifier == "repeated":
+                stream.write(self.getIndent())
+                stream.write("void "+field.name+"On(uint32_t rank)")
+                stream.write(" {"+field.name+"[rank] = true;};\n")
+            
+                stream.write(self.getIndent())
+                stream.write("void "+field.name+"Off(uint32_t rank)")
+                stream.write(" {"+field.name+"[rank] = false;};\n")
+        
+                stream.write(self.getIndent())
+                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On(uint32_t rank)")
+                stream.write(" {return "+field.name+"[rank];};\n")
+            else:
             stream.write(self.getIndent())
             stream.write("void "+field.name+"On()")
             stream.write(" {"+field.name+" = true;};\n")
@@ -1064,6 +1077,16 @@
             stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On()")
             stream.write(" {return "+field.name+";};\n")
         else:
+            if field.qualifier == "repeated":
+                stream.write(self.getIndent())
+                stream.write(targetTypeName + " 
get"+self.upperFirst(field.name)+"(uint32_t rank)")
+                stream.write(" {return "+field.name+"[rank];};\n")  
+                
+                stream.write(self.getIndent())
+                stream.write("void set"+self.upperFirst(field.name)+"(")
+                stream.write(targetTypeName+" 
new"+self.upperFirst(field.name)+", uint32_t rank)")
+                stream.write(" 
{"+field.name+"[rank]=new"+self.upperFirst(field.name)+";};\n")      
+            else:
             stream.write(self.getIndent())
             stream.write(targetTypeName + " 
get"+self.upperFirst(field.name)+"()")
             stream.write(" {return "+field.name+";};\n")        
@@ -1073,12 +1096,23 @@
             stream.write(targetTypeName+" new"+self.upperFirst(field.name)+")")
             stream.write(" 
{"+field.name+"=new"+self.upperFirst(field.name)+";};\n")        
                                                     
+    def writeDeclarationFieldStatement(self,stream,field):
+        stream.write(self.getIndent())     
+        if field.qualifier == "repeated":
+            stream.write("std::vector<%s> %s;" % 
(self.getTargetTypeName(field.typeid.name),field.name))
+        else:               
+            stream.write("%s %s;" % 
(self.getTargetTypeName(field.typeid.name),field.name))                         
               
+        self.writeComment(stream, field)        
+                                                    
     def generateHeader(self,stream,factoryOnly=False):
         # write the usual header protecting MACRO
         (headerProtectMacroName,ext) = os.path.splitext(self.AST.name)
-        headerProtectMacroName = "%s__HH" % headerProtectMacroName.upper()
+        headerProtectMacroName = "%s_HH" % headerProtectMacroName.upper()
         stream.write("#ifndef %s\n"%headerProtectMacroName)
         stream.write("#define %s\n"%headerProtectMacroName)        
+        # add necessary standard includes
+        stream.write("#include <vector>\n")
+        stream.write("#include <string>\n")
         # Generate namespace for specified package package 
         # we may have nested namespace
         self.openNamespaces(stream)
@@ -1151,9 +1185,7 @@
                 stream.write(self.getIndent()+"protected:\n")
                 self.indent()
                 for field in msg.fields:
-                    stream.write(self.getIndent())                
-                    stream.write("%s %s;" % 
(self.getTargetTypeName(field.typeid.name),field.name))                         
               
-                    self.writeComment(stream, field)
+                    self.writeDeclarationFieldStatement(stream,field)          
          
                 self.unIndent()
                 # end protected  
                 
@@ -1217,6 +1249,9 @@
         """
         Generate the body.
         """
+        # add necessary standard includes
+        stream.write("#include <vector>\n")
+        stream.write("#include <string>\n")
         # Generate namespace for specified package package 
         # we may have nested namespace
         self.openNamespaces(stream)
@@ -1393,28 +1428,6 @@
 for l in msgFile:
     cname = l.strip('_ \n')    
 
-    if (gentype.lower()=="body"):
-        print "/*<BEGIN>---------- %s ------------<BEGIN>*/" % cname.title()
-        print "NM_%s::NM_%s() {"  % (cname.title(),cname.title())
-        print "    this->name = \"%s\";" % cname
-        print "    this->type = NetworkMessage::%s;" % cname
-        print "    /* specific field init */"
-        print "}"
-        print "NM_%s::~NM_%s() {"  % (cname.title(), cname.title())
-        print "}"       
-        print "void NM_%s::serialize() {"  % cname.title()
-        print "  /* call mother class */      "
-        print "  NetworkMessage::serialize(); "
-        print "  /* specific code (if any) goes here */"
-        print "} /* end of serialize */ "
-        print "void NM_%s::deserialize() {" % cname.title()
-        print "  /* call mother class */      "
-        print "  NetworkMessage::deserialize(); "
-        print "  /* specific code (if any) goes here */"
-        print "} /* end of deserialize */"
-        print "/*<END>---------- %s ------------<END>*/\n" % cname.title()
-
-
     if (gentype.lower()=="factory"):
         print "case NetworkMessage::%s:" % cname
         print "   msg = new NM_%s(); " %cname.title()

Index: CERTI_NetworkMessage.msg
===================================================================
RCS file: /sources/certi/certi/scripts/CERTI_NetworkMessage.msg,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- CERTI_NetworkMessage.msg    5 Sep 2009 18:38:56 -0000       1.3
+++ CERTI_NetworkMessage.msg    6 Sep 2009 10:02:02 -0000       1.4
@@ -26,6 +26,11 @@
 
 // Basic Message is the base class message for CERTI
 native BasicMessage
+//native BasicMessage {
+//    language C++    [#include BasicMessage.hh]
+//    language Python [import certi.BasicMessage]
+//    language Java   [import certi.BasicMessage]
+//}
 
 // Network message is the base class
 // for message exchanged between RTIA and RTIG
@@ -38,14 +43,8 @@
 // AKA CERTI Message
 native Message
 
-enum SampleMessageType {
-   NOT_USED,
-   SMT_BASIC,
-   SMT_NETWORK_MESSAGE,
-   SMT_MESSAGE
-}
-
 native AttributeHandle
+
 message NM_WithHandleArray : merge  NetworkMessage {
        repeated AttributeHandle handle 
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]