|
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
|
slice2orca/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 #include <map> 00017 #include <vector> 00018 00019 namespace slice2log 00020 { 00021 00022 class Gen : private ::IceUtil::noncopyable 00023 { 00024 public: 00025 00026 Gen(const std::string&, 00027 const std::string&, 00028 const std::string&, 00029 const std::string&, 00030 const std::vector<std::string>&, 00031 const std::string&, 00032 const std::vector<std::string>&, 00033 const std::string&, 00034 const std::string&, 00035 bool, 00036 bool, 00037 bool, 00038 bool, 00039 // custom options 00040 const std::string& module, 00041 bool, 00042 bool); 00043 ~Gen(); 00044 00045 bool operator!() const; // Returns true if there was a constructor error 00046 00047 void generate(const Slice::UnitPtr&); 00048 00049 static bool setUseWstring(Slice::ContainedPtr, std::list<bool>&, bool); 00050 static bool resetUseWstring(std::list<bool>&); 00051 00052 private: 00053 00054 void writeExtraHeaders(::IceUtilInternal::Output&); 00055 00056 ::IceUtilInternal::Output H; 00057 ::IceUtilInternal::Output C; 00058 00059 std::string _base; 00060 std::string _headerExtension; 00061 std::string _sourceExtension; 00062 std::vector<std::string> _extraHeaders; 00063 std::string _include; 00064 std::vector<std::string> _includePaths; 00065 std::string _dllExport; 00066 bool _impl; 00067 bool _checksum; 00068 bool _stream; 00069 bool _ice; 00070 // custom options 00071 std::string _module; 00072 bool _util; 00073 bool _log; 00074 00075 class GlobalIncludeVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00076 { 00077 public: 00078 00079 GlobalIncludeVisitor(::IceUtilInternal::Output&); 00080 00081 virtual bool visitModuleStart(const Slice::ModulePtr&); 00082 00083 private: 00084 00085 ::IceUtilInternal::Output& H; 00086 00087 bool _finished; 00088 }; 00089 00090 class ToStringVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00091 { 00092 public: 00093 00094 ToStringVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, bool); 00095 00096 virtual bool visitModuleStart(const Slice::ModulePtr&); 00097 virtual void visitModuleEnd(const Slice::ModulePtr&); 00098 virtual bool visitClassDefStart(const Slice::ClassDefPtr&); 00099 virtual void visitClassDefEnd(const Slice::ClassDefPtr&); 00100 virtual bool visitExceptionStart(const Slice::ExceptionPtr&); 00101 virtual void visitExceptionEnd(const Slice::ExceptionPtr&); 00102 virtual bool visitStructStart(const Slice::StructPtr&); 00103 virtual void visitStructEnd(const Slice::StructPtr&); 00104 virtual void visitSequence(const Slice::SequencePtr&); 00105 virtual void visitDictionary(const Slice::DictionaryPtr&); 00106 virtual void visitEnum(const Slice::EnumPtr&); 00107 virtual void visitConst(const Slice::ConstPtr&); 00108 virtual void visitDataMember(const Slice::DataMemberPtr&); 00109 00110 private: 00111 00112 void emitUpcall(const Slice::ExceptionPtr&, const std::string&, bool = false); 00113 00114 ::IceUtilInternal::Output& H; 00115 ::IceUtilInternal::Output& C; 00116 00117 std::string _dllExport; 00118 bool _stream; 00119 bool _doneStaticSymbol; 00120 bool _useWstring; 00121 std::list<bool> _useWstringHist; 00122 }; 00123 00124 class ToInitVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00125 { 00126 public: 00127 00128 ToInitVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, bool); 00129 00130 virtual bool visitModuleStart(const Slice::ModulePtr&); 00131 virtual void visitModuleEnd(const Slice::ModulePtr&); 00132 virtual bool visitClassDefStart(const Slice::ClassDefPtr&); 00133 virtual void visitClassDefEnd(const Slice::ClassDefPtr&); 00134 virtual bool visitExceptionStart(const Slice::ExceptionPtr&); 00135 virtual void visitExceptionEnd(const Slice::ExceptionPtr&); 00136 virtual bool visitStructStart(const Slice::StructPtr&); 00137 virtual void visitStructEnd(const Slice::StructPtr&); 00138 virtual void visitSequence(const Slice::SequencePtr&); 00139 virtual void visitDictionary(const Slice::DictionaryPtr&); 00140 virtual void visitEnum(const Slice::EnumPtr&); 00141 virtual void visitConst(const Slice::ConstPtr&); 00142 virtual void visitDataMember(const Slice::DataMemberPtr&); 00143 00144 private: 00145 00146 void emitUpcall(const Slice::ExceptionPtr&, const std::string&, bool = false); 00147 00148 ::IceUtilInternal::Output& H; 00149 ::IceUtilInternal::Output& C; 00150 00151 std::string _dllExport; 00152 bool _stream; 00153 bool _doneStaticSymbol; 00154 bool _useWstring; 00155 std::list<bool> _useWstringHist; 00156 }; 00157 00158 class ToLogVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00159 { 00160 public: 00161 00162 ToLogVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, bool); 00163 00164 virtual bool visitModuleStart(const Slice::ModulePtr&); 00165 virtual void visitModuleEnd(const Slice::ModulePtr&); 00166 virtual bool visitClassDefStart(const Slice::ClassDefPtr&); 00167 virtual void visitClassDefEnd(const Slice::ClassDefPtr&); 00168 virtual bool visitExceptionStart(const Slice::ExceptionPtr&); 00169 virtual void visitExceptionEnd(const Slice::ExceptionPtr&); 00170 virtual bool visitStructStart(const Slice::StructPtr&); 00171 virtual void visitStructEnd(const Slice::StructPtr&); 00172 virtual void visitSequence(const Slice::SequencePtr&); 00173 virtual void visitDictionary(const Slice::DictionaryPtr&); 00174 virtual void visitEnum(const Slice::EnumPtr&); 00175 virtual void visitConst(const Slice::ConstPtr&); 00176 virtual void visitDataMember(const Slice::DataMemberPtr&); 00177 00178 private: 00179 00180 void emitUpcall(const Slice::ExceptionPtr&, const std::string&, bool = false); 00181 00182 ::IceUtilInternal::Output& H; 00183 ::IceUtilInternal::Output& C; 00184 00185 std::string _dllExport; 00186 bool _stream; 00187 bool _doneStaticSymbol; 00188 bool _useWstring; 00189 std::list<bool> _useWstringHist; 00190 }; 00191 00192 class FromLogVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00193 { 00194 public: 00195 00196 FromLogVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, bool); 00197 00198 virtual bool visitModuleStart(const Slice::ModulePtr&); 00199 virtual void visitModuleEnd(const Slice::ModulePtr&); 00200 virtual bool visitClassDefStart(const Slice::ClassDefPtr&); 00201 virtual void visitClassDefEnd(const Slice::ClassDefPtr&); 00202 virtual bool visitExceptionStart(const Slice::ExceptionPtr&); 00203 virtual void visitExceptionEnd(const Slice::ExceptionPtr&); 00204 virtual bool visitStructStart(const Slice::StructPtr&); 00205 virtual void visitStructEnd(const Slice::StructPtr&); 00206 virtual void visitSequence(const Slice::SequencePtr&); 00207 virtual void visitDictionary(const Slice::DictionaryPtr&); 00208 virtual void visitEnum(const Slice::EnumPtr&); 00209 virtual void visitConst(const Slice::ConstPtr&); 00210 virtual void visitDataMember(const Slice::DataMemberPtr&); 00211 00212 private: 00213 00214 void emitUpcall(const Slice::ExceptionPtr&, const std::string&, bool = false); 00215 00216 ::IceUtilInternal::Output& H; 00217 ::IceUtilInternal::Output& C; 00218 00219 std::string _dllExport; 00220 bool _stream; 00221 bool _doneStaticSymbol; 00222 bool _useWstring; 00223 std::list<bool> _useWstringHist; 00224 }; 00225 00226 enum OutputType 00227 { 00228 OutputString, 00229 OutputInit, 00230 OutputToLog, 00231 OutputFromLog 00232 }; 00233 00234 class HandleVisitor : private ::IceUtil::noncopyable, public Slice::ParserVisitor 00235 { 00236 public: 00237 00238 HandleVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, bool, OutputType); 00239 00240 virtual bool visitModuleStart(const Slice::ModulePtr&); 00241 virtual void visitModuleEnd(const Slice::ModulePtr&); 00242 virtual void visitClassDecl(const Slice::ClassDeclPtr&); 00243 virtual bool visitClassDefStart(const Slice::ClassDefPtr&); 00244 00245 // alexm: the namespace of the generated library 00246 std::string libNamespace_; 00247 private: 00248 00249 ::IceUtilInternal::Output& H; 00250 ::IceUtilInternal::Output& C; 00251 00252 std::string _dllExport; 00253 bool _stream; 00254 00255 // alexm: store inheritance information 00256 // e.g. Base <-- Derived <-- Super 00257 // as we go through derived classes we compile information for each base class 00258 // the map<string,vector<string> will contains the following 00259 // [B],<D,S> 00260 // [D],<S> 00261 typedef std::map<std::string,std::vector<std::string> > InheritanceMap; 00262 InheritanceMap inherit_; 00263 00264 OutputType outputType_; 00265 }; 00266 }; 00267 00268 } 00269 00270 #endif |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)
1.4.5