certi-cvs
[Top][All Lists]
Advanced

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

[certi-cvs] certi/scripts GenerateMessages.py


From: certi-cvs
Subject: [certi-cvs] certi/scripts GenerateMessages.py
Date: Sat, 05 Sep 2009 21:26:35 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      09/09/05 21:26:35

Modified files:
        scripts        : GenerateMessages.py 

Log message:
        Begin of a C++ body generation

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.16&r2=1.17

Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- GenerateMessages.py 5 Sep 2009 18:40:49 -0000       1.16
+++ GenerateMessages.py 5 Sep 2009 21:26:33 -0000       1.17
@@ -19,7 +19,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenerateMessages.py,v 1.16 2009/09/05 18:40:49 erk Exp $
+## $Id: GenerateMessages.py,v 1.17 2009/09/05 21:26:33 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -1199,6 +1199,18 @@
         stream.write("#endif\n")
         
     def writeInitFieldStatement(self,stream,field):
+        if field.hasDefaultValue():            
+            stream.write(self.getIndent())
+            stream.write(field.name+"="+field.defaultValue+";\n")
+        else:
+            stream.write(self.getIndent())
+            stream.write(self.commentLineBeginWith)
+            stream.write(field.name+"= <no default value>\n")
+            
+    def writeSerializeFieldStatement(self,stream,field):
+        pass
+    
+    def writeDeSerializeFieldStatement(self,stream,field):
         pass
         
     def generateBody(self,stream,factoryOnly=False):
@@ -1211,80 +1223,86 @@
         if not factoryOnly:                        
             # Generate message type
             for msg in self.AST.messages:
-                self.writeComment(stream, msg)                            
                 # Generate Constructor                
                 stream.write(self.getIndent()+"%s::%s() {\n" % 
(msg.name,msg.name))            
                 self.indent()
+                # Assign my name.
+                stream.write(self.getIndent()+"this->name = 
\""+msg.name+"\";\n")
+                stream.write(self.getIndent()+"this->type = 
"+msg.name.upper().replace("NM_","NetworkMessage::")+";\n")
                 # Write init value if any was provided
                 if len(msg.fields)>0:
                     for field in msg.fields:
                         self.writeInitFieldStatement(stream,field)             
           
                 self.unIndent()
-                stream.write(self.getIndent()+"}\n")
+                stream.write(self.getIndent()+"}\n\n")
                 # Generate Destructor                
                 stream.write(self.getIndent()+"%s::~%s() {\n" % 
(msg.name,msg.name))            
                 self.indent()
                 self.unIndent()
-                stream.write(self.getIndent()+"}\n")
+                stream.write(self.getIndent()+"}\n\n")
                                 
                 # write virtual serialize and deserialize
                 # if we have some specific field
                 if len(msg.fields)>0:
-                    # serialize/deserialize 
-                    stream.write(self.getIndent()+"virtual void 
serialize(MessageBuffer& msgBuffer);\n")
-                    stream.write(self.getIndent()+"virtual void 
deserialize(MessageBuffer& msgBuffer);\n")
-                    # specific getter/setter
-                    stream.write(self.getIndent()+self.commentLineBeginWith+" 
specific Getter(s)/Setter(s)\n")
-                    for field in msg.fields:
-                        self.writeOneGetterSetter(stream,field)
-                                
-                self.unIndent()
-                # end public:
-                
-                # begin protected
-                stream.write(self.getIndent()+"protected:\n")
+                    # begin serialize method 
+                    stream.write(self.getIndent()+"void 
serialize(MessageBuffer& msgBuffer) {\n")
                 self.indent()
+                    stream.write(self.getIndent()+self.commentLineBeginWith)
+                    stream.write("Call mother class\n")
+                    
stream.write(self.getIndent()+"Super::serialize(msgBuffer);\n")
+                    stream.write(self.getIndent()+self.commentLineBeginWith)
+                    stream.write("Specific serialization code\n")
                 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.writeSerializeFieldStatement(stream,field)
                 self.unIndent()
-                # end protected  
+                    stream.write(self.getIndent()+"}\n\n")
+                    # end serialize method
                 
-                # begin private
-                stream.write(self.getIndent()+"private:\n")
+                    # begin deserialize method
+                    stream.write(self.getIndent()+"void 
deserialize(MessageBuffer& msgBuffer) {\n")
                 self.indent()
+                    stream.write(self.getIndent()+self.commentLineBeginWith)
+                    stream.write("Call mother class\n")
+                    
stream.write(self.getIndent()+"Super::deserialize(msgBuffer);\n")
+                    stream.write(self.getIndent()+self.commentLineBeginWith)
+                    stream.write("Specific deserialization code\n")
+                    for field in msg.fields:
+                        self.writeDeSerializeFieldStatement(stream,field)
                 self.unIndent()
-                # end private
-                
-                self.unIndent()
-                stream.write(self.getIndent() + "}\n")
+                    stream.write(self.getIndent()+"}\n\n")
+                    # end deserialize method
 
         # Generate Factory (if any)
         # @todo
         if self.AST.hasFactory():             
-            self.writeComment(stream, self.AST.factory)
-            stream.write(self.getIndent() + "class CERTI_EXPORT %s {\n" % 
self.AST.factory.name)
-            self.indent()
-            # begin public
-            stream.write(self.getIndent()+"public:\n")            
-            self.indent()            
-            stream.write(self.getIndent()+"static %s* %s(%s) throw 
(RTIinternalError);\n"% self.AST.factory.creator)
-            stream.write(self.getIndent()+"static %s* %s(%s) throw 
(RTIinternalError);\n"% self.AST.factory.receiver)
-            self.unIndent()
-            #end public
-            #begin protected
-            stream.write(self.getIndent()+"protected:\n")
+            # begin creator                                           
+            creator = 
(self.AST.factory.creator[0],self.AST.factory.name)+self.AST.factory.creator[1:]
            
+            stream.write(self.getIndent()+"%s* %s::%s(%s type) throw 
(RTIinternalError) {\n"% creator)
             self.indent()
+            # FIXME put creator code here
             self.unIndent()
-            #end protected
-            #begin private
-            stream.write(self.getIndent()+"private:\n")
+            stream.write(self.getIndent()+"}\n\n")
+            # begin receiver
+            receiver = 
(self.AST.factory.receiver[0],self.AST.factory.name)+self.AST.factory.receiver[1:]
+            stream.write(self.getIndent()+"%s* %s::%s(%s stream) throw 
(RTIinternalError) {\n"% receiver)
             self.indent()
-            self.unIndent()
-            #end private
+            stream.write(self.getIndent()+self.commentLineBeginWith+" FIXME 
This is not thread safe\n")
+            stream.write(self.getIndent()+"static MessageBuffer msgBuffer;\n")
+            stream.write(self.getIndent()+"NetworkMessage  msgGen;\n")
+            stream.write(self.getIndent()+"NetworkMessage* msg;\n\n")
+            stream.write(self.getIndent()+self.commentLineBeginWith+" receive 
generic message \n")
+            
stream.write(self.getIndent()+"msgGen.receive(socket,msgBuffer);\n")
+            stream.write(self.getIndent()+self.commentLineBeginWith+" create 
specific message from type \n")
+            
+            stream.write(self.getIndent()+"msg = ");
+            
stream.write(self.AST.factory.name+self.AST.factory.creator[1]+"(msgGen.getType());")
+            
+            
stream.write(self.getIndent()+"msgBuffer.assumeSizeFromReservedBytes();\n")    
+            stream.write(self.getIndent()+"msg->deserialize(msgBuffer);\n")
+            stream.write(self.getIndent()+"return msg;\n")
             self.unIndent()
             stream.write(self.getIndent()+"}\n\n")
+                        
         self.closeNamespaces(stream)                        
 
 class JavaGenerator(CodeGenerator):




reply via email to

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