summaryrefslogtreecommitdiff
path: root/slicer/tool/parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'slicer/tool/parser.h')
-rw-r--r--slicer/tool/parser.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/slicer/tool/parser.h b/slicer/tool/parser.h
new file mode 100644
index 0000000..1193664
--- /dev/null
+++ b/slicer/tool/parser.h
@@ -0,0 +1,75 @@
+#ifndef SLICER_PARSER_H
+#define SLICER_PARSER_H
+
+#include <Slice/Parser.h>
+#include <boost/optional.hpp>
+#include <boost/filesystem/path.hpp>
+#include <visibility.h>
+
+namespace Slicer {
+ typedef boost::shared_ptr<FILE> FilePtr;
+
+ class DLL_PUBLIC Slicer : public Slice::ParserVisitor {
+ public:
+ typedef std::vector<std::string> Args;
+ class ConversionSpec {
+ public:
+ ConversionSpec(const Args &);
+
+ std::string ExchangeType;
+ std::string ConvertToModelFunc;
+ std::string ConvertToExchangeFunc;
+ Args Options;
+ };
+ typedef std::vector<ConversionSpec> Conversions;
+
+ Slicer(FILE * c);
+
+ static unsigned int Apply(const boost::filesystem::path & ice, const boost::filesystem::path & cpp);
+ static unsigned int Apply(const boost::filesystem::path & ice, FILE *);
+ static unsigned int Apply(const boost::filesystem::path & ice, const boost::filesystem::path & cpp, const Args &, bool);
+ static unsigned int Apply(const boost::filesystem::path & ice, FILE *, const Args &, bool);
+
+ unsigned int Components() const;
+
+#pragma GCC visibility push(hidden)
+ virtual bool visitUnitStart(const Slice::UnitPtr&) override;
+
+ virtual void visitUnitEnd(const Slice::UnitPtr&) override;
+
+ virtual bool visitModuleStart(const Slice::ModulePtr & m) override;
+
+ virtual bool visitClassDefStart(const Slice::ClassDefPtr & c) override;
+
+ virtual bool visitStructStart(const Slice::StructPtr&) override;
+
+ virtual void visitEnum(const Slice::EnumPtr &) override;
+
+ virtual void visitSequence(const Slice::SequencePtr & s) override;
+
+ virtual void visitDictionary(const Slice::DictionaryPtr & d) override;
+
+ virtual void visitModuleEnd(const Slice::ModulePtr & m) override;
+
+ private:
+ void createNewModelPartPtrFor(const Slice::TypePtr & type) const;
+
+ void visitComplexDataMembers(Slice::ConstructedPtr t, const Slice::DataMemberList &) const;
+
+ void defineConversions(Slice::DataMemberPtr dm) const;
+ void defineRootName(const std::string & type, const std::string & name) const;
+
+ bool hasMetadata(const std::list<std::string> & metadata) const;
+ void copyMetadata(const std::list<std::string> & metadata) const;
+ static Conversions getAllConversions(Slice::DataMemberPtr dm);
+ static Conversions getConversions(const std::list<std::string> & metadata);
+#pragma GCC visibility pop
+
+ unsigned int components;
+ FILE * cpp;
+ unsigned int classNo;
+ };
+}
+
+#endif
+