summaryrefslogtreecommitdiff
path: root/odb/semantics/relational/deferrable.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/semantics/relational/deferrable.cxx')
-rw-r--r--odb/semantics/relational/deferrable.cxx56
1 files changed, 56 insertions, 0 deletions
diff --git a/odb/semantics/relational/deferrable.cxx b/odb/semantics/relational/deferrable.cxx
new file mode 100644
index 0000000..6aecb12
--- /dev/null
+++ b/odb/semantics/relational/deferrable.cxx
@@ -0,0 +1,56 @@
+// file : odb/semantics/relational/deferrable.cxx
+// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
+// license : GNU GPL v3; see accompanying LICENSE file
+
+#include <ostream>
+#include <istream>
+
+#include <odb/semantics/relational/deferrable.hxx>
+
+using namespace std;
+
+namespace semantics
+{
+ namespace relational
+ {
+ static const char* deferrable_[] =
+ {
+ "NOT DEFERRABLE",
+ "IMMEDIATE",
+ "DEFERRED"
+ };
+
+ string deferrable::
+ string () const
+ {
+ return deferrable_[v_];
+ }
+
+ ostream&
+ operator<< (ostream& os, deferrable const& v)
+ {
+ return os << v.string ();
+ }
+
+ istream&
+ operator>> (istream& is, deferrable& v)
+ {
+ string s;
+ is >> s;
+
+ if (!is.fail ())
+ {
+ if (s == "not_deferrable" || s == "NOT DEFERRABLE")
+ v = deferrable::not_deferrable;
+ else if (s == "immediate" || s == "IMMEDIATE")
+ v = deferrable::immediate;
+ else if (s == "deferred" || s == "DEFERRED")
+ v = deferrable::deferred;
+ else
+ is.setstate (istream::failbit);
+ }
+
+ return is;
+ }
+ }
+}