diff options
Diffstat (limited to 'odb/odb/semantics/fundamental.hxx')
-rw-r--r-- | odb/odb/semantics/fundamental.hxx | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/odb/odb/semantics/fundamental.hxx b/odb/odb/semantics/fundamental.hxx new file mode 100644 index 0000000..15b5cbb --- /dev/null +++ b/odb/odb/semantics/fundamental.hxx @@ -0,0 +1,150 @@ +// file : odb/semantics/fundamental.hxx +// license : GNU GPL v3; see accompanying LICENSE file + +#ifndef ODB_SEMANTICS_FUNDAMENTAL_HXX +#define ODB_SEMANTICS_FUNDAMENTAL_HXX + +#include <odb/semantics/elements.hxx> + +namespace semantics +{ + // + // Fundamental C++ types. + // + + struct fund_type: type + { + virtual string + fq_name () const; + + virtual string + fq_name (names*) const; + }; + + struct fund_void: fund_type + { + fund_void (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + }; + + // + // Integral. + // + + 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: integral_type + { + fund_wchar (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const; + }; + + struct fund_char16: integral_type + { + fund_char16 (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return true;} + }; + + 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: integral_type + { + fund_signed_char (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} + }; + + 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: integral_type + { + fund_short (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} + }; + + 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: integral_type + { + fund_int (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} + }; + + 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: integral_type + { + fund_long (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} + }; + + 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: integral_type + { + fund_long_long (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + virtual bool unsigned_ () const {return false;} + }; + + 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;} + }; + + // + // Real. + // + + struct fund_float: fund_type + { + fund_float (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + }; + + struct fund_double: fund_type + { + fund_double (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + }; + + struct fund_long_double: fund_type + { + fund_long_double (tree tn): node (path ("<fundamental>"), 0, 0, tn) {} + }; +} + +#endif // ODB_SEMANTICS_FUNDAMENTAL_HXX |