orca-robotics INTRODUCTION Overview Download and Install Quick Start Documentation Publications REPOSITORY Interfaces Components Libraries Utilities Software Map DEVELOPER Tutorials Examples Dev Guide Dashboard Wiki login/pass: orca/orca PEOPLE Contributors Users Project Download Mailing lists
|
gen.h00001 /* 00002 * Orca-Robotics Project: Components for robotics 00003 * http://orca-robotics.sf.net/ 00004 * Copyright (c) 2008 Alex Makarenko 00005 * 00006 * This copy of Orca is licensed to you under the terms described in 00007 * the LICENSE file included in this distribution. 00008 * 00009 */ 00010 00011 #ifndef GEN_H 00012 #define GEN_H 00013 00014 #include <Slice/Parser.h> 00015 #include <IceUtil/OutputUtil.h> 00016 00017 namespace slice2string 00018 { 00019 00020 class Gen : private ::IceUtil::noncopyable 00021 { 00022 public: 00023 00024 Gen(const std::string&, 00025 const std::string&, 00026 const std::string&, 00027 const std::string&, 00028 const std::vector<std::string>&, 00029 const std::string&, 00030 const std::vector<std::string>&, 00031 const std::string&, 00032 const std::string&, 00033 bool, 00034 bool, 00035 bool, 00036 bool, 00037 // custom option 00038 const std::string& module); 00039 ~Gen(); 00040 00041 bool operator!() const; // Returns true if there was a constructor error 00042 00043 void generate(const Slice::UnitPtr&); 00044 00045 static bool setUseWstring(Slice::ContainedPtr, std::list<bool>&, bool); 00046 static bool resetUseWstring(std::list<bool>&); 00047 00048 private: 00049 00050 void writeExtraHeaders(::IceUtil::Output&); 00051 00052 ::IceUtil::Output H; 00053 ::IceUtil::Output C; 00054 00055 std::string _base; 00056 std::string _headerExtension; 00057 std::string _sourceExtension; 00058 std::vector<std::string> _extraHeaders; 00059 std::string _include; 00060 std::vector<std::string> _includePaths; 00061 std::string _dllExport; 00062 bool _impl; 00063 bool _checksum; 00064 bool _stream; 00065 bool _ice; 00066 // custom option 00067 std::string _module; 00068 00069 class GlobalIncludeVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00070 { 00071 public: 00072 00073 GlobalIncludeVisitor(::IceUtil::Output&); 00074 00075 virtual bool visitModuleStart(const Slice::ModulePtr&); 00076 00077 private: 00078 00079 ::IceUtil::Output& H; 00080 00081 bool _finished; 00082 }; 00083 00084 class TypesVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00085 { 00086 public: 00087 00088 TypesVisitor(::IceUtil::Output&, ::IceUtil::Output&, const std::string&, bool); 00089 00090 virtual bool visitModuleStart(const Slice::ModulePtr&); 00091 virtual void visitModuleEnd(const Slice::ModulePtr&); 00092 virtual bool visitClassDefStart(const Slice::ClassDefPtr&); 00093 virtual void visitClassDefEnd(const Slice::ClassDefPtr&); 00094 virtual bool visitExceptionStart(const Slice::ExceptionPtr&); 00095 virtual void visitExceptionEnd(const Slice::ExceptionPtr&); 00096 virtual bool visitStructStart(const Slice::StructPtr&); 00097 virtual void visitStructEnd(const Slice::StructPtr&); 00098 virtual void visitSequence(const Slice::SequencePtr&); 00099 virtual void visitDictionary(const Slice::DictionaryPtr&); 00100 virtual void visitEnum(const Slice::EnumPtr&); 00101 virtual void visitConst(const Slice::ConstPtr&); 00102 virtual void visitDataMember(const Slice::DataMemberPtr&); 00103 00104 private: 00105 00106 void emitUpcall(const Slice::ExceptionPtr&, const std::string&, bool = false); 00107 00108 ::IceUtil::Output& H; 00109 ::IceUtil::Output& C; 00110 00111 std::string _dllExport; 00112 bool _stream; 00113 bool _doneStaticSymbol; 00114 bool _useWstring; 00115 std::list<bool> _useWstringHist; 00116 }; 00117 }; 00118 00119 } 00120 00121 #endif |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)