Adding DOCUMENTATION flag to the CMakeLists.txt
[libt2n] / codegen / main.cpp
index 2e377ec..7271b22 100644 (file)
@@ -1,20 +1,24 @@
 /*
-    Copyright (C) 2006-2008
+    Copyright (C) 2006-2008 by Intra2net AG
     intra2net.com
 
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
+    The software in this package is distributed under the GNU General
+    Public License version 2 (with a special exception described below).
 
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
+    A copy of GNU General Public License (GPL) is included in this distribution,
+    in the file COPYING.GPL.
 
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    As a special exception, if other files instantiate templates or use macros
+    or inline functions from this file, or you compile this file and link it
+    with other works to produce a work based on this file, this file
+    does not by itself cause the resulting work to be covered
+    by the GNU General Public License.
+
+    However the source code for this file must still be made available
+    in accordance with section (3) of the GNU General Public License.
+
+    This exception does not invalidate any other reasons why a work based
+    on this file might be covered by the GNU General Public License.
 */
 
 #include <libxml++/libxml++.h>
 #include <stdexcept>
 #include <string>
 #include <boost/lexical_cast.hpp>
-#ifdef HAVE_CONFIG_H
+#include <boost/serialization/extended_type_info.hpp>
+
 #include "config.h"
-#endif
+
 
 
 //! map group to class name
@@ -138,6 +143,15 @@ struct parse_error : public std::runtime_error
     {}
 };
 
+struct error_name_too_long : public std::runtime_error
+{
+    error_name_too_long(const std::string &name)
+            : std::runtime_error("symbol name '" + name + "' too long for serialization ("
+                                 + boost::lexical_cast<std::string>(name.length()) + ">"
+                                 + boost::lexical_cast<std::string>(BOOST_SERIALIZATION_MAX_KEY_SIZE-1) + ")")
+    {}
+};
+
 //! get type by id
 /*!
   \return type name or empty string on error
@@ -220,11 +234,17 @@ struct t2n_procedure
 
     std::string ret_classname() const
     {
-        return name+mangled+"_res";
+        std::string result = name+mangled+"_res";
+        if (result.length() >= BOOST_SERIALIZATION_MAX_KEY_SIZE)
+            throw error_name_too_long(result);
+        return result;
     }
     std::string cmd_classname() const
     {
-        return name+mangled+"_cmd";
+        std::string result = name+mangled+"_cmd";
+        if (result.length() >= BOOST_SERIALIZATION_MAX_KEY_SIZE)
+            throw error_name_too_long(result);
+        return result;
     }
     bool hasReturn() const {return !ret_type.isVoid();}
 };