diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-10-15 07:01:17 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-10-15 07:01:17 +0200 |
commit | a482f1c4dd4efab83d3b19309900f1cbf54383a5 (patch) | |
tree | 3c1ab27e420cbf760a54a1c4be61bbd0448a4873 /odb/semantics/fundamental.hxx | |
parent | 400d258aab3722be3a4b8548870afad1574f3ad8 (diff) |
Automatically map C++11 enum classes (strong enums)
Diffstat (limited to 'odb/semantics/fundamental.hxx')
-rw-r--r-- | odb/semantics/fundamental.hxx | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/odb/semantics/fundamental.hxx b/odb/semantics/fundamental.hxx index 55ce322..75cbbf5 100644 --- a/odb/semantics/fundamental.hxx +++ b/odb/semantics/fundamental.hxx @@ -13,7 +13,7 @@ namespace semantics // Fundamental C++ types. // - struct fund_type: public type + struct fund_type: type { virtual string fq_name () const; @@ -27,84 +27,105 @@ namespace semantics fund_void (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} }; - struct fund_bool: fund_type - { - fund_bool (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} - }; - // // Integral. // - struct fund_char: fund_type + struct integral_type: fund_type + { + virtual bool + unsigned_ () const = 0; + }; + + struct fund_bool: integral_type + { + fund_bool (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} + }; + + struct fund_char: integral_type { fund_char (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const; }; - struct fund_wchar: fund_type + struct fund_wchar: integral_type { fund_wchar (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const; }; - struct fund_char16: fund_type + struct fund_char16: integral_type { fund_char16 (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; - struct fund_char32: fund_type + struct fund_char32: integral_type { fund_char32 (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; - struct fund_signed_char: fund_type + struct fund_signed_char: integral_type { fund_signed_char (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} }; - struct fund_unsigned_char: fund_type + struct fund_unsigned_char: integral_type { fund_unsigned_char (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; - struct fund_short: fund_type + struct fund_short: integral_type { fund_short (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} }; - struct fund_unsigned_short: fund_type + struct fund_unsigned_short: integral_type { fund_unsigned_short (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; - struct fund_int: fund_type + struct fund_int: integral_type { fund_int (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} }; - struct fund_unsigned_int: fund_type + struct fund_unsigned_int: integral_type { fund_unsigned_int (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; - struct fund_long: fund_type + struct fund_long: integral_type { fund_long (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} }; - struct fund_unsigned_long: fund_type + struct fund_unsigned_long: integral_type { fund_unsigned_long (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; - struct fund_long_long: fund_type + struct fund_long_long: integral_type { fund_long_long (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} }; - struct fund_unsigned_long_long: fund_type + struct fund_unsigned_long_long: integral_type { fund_unsigned_long_long (tree tn) : node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} }; // |