From 107c3754b2eccd0f2a30121aab9b29c25f83e40c Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 13 Aug 2010 13:39:09 +0200 Subject: Move value_traits from odb to odb::mysql --- odb/mysql/traits.hxx | 66 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/odb/mysql/traits.hxx b/odb/mysql/traits.hxx index 7d1caca..fd0b917 100644 --- a/odb/mysql/traits.hxx +++ b/odb/mysql/traits.hxx @@ -45,84 +45,110 @@ namespace odb }; template - class value_traits: public odb::value_traits + class generic_value_traits + { + public: + typedef T type; + typedef T value_type; + + template + static void + set_value (T& v, I i, bool is_null) + { + if (!is_null) + v = T (i); + else + v = T (); + } + + template + static void + set_image (I& i, bool& is_null, T v) + { + is_null = false; + i = I (v); + } + }; + + template + class value_traits: public generic_value_traits { }; // Integral types. // template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_tiny; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_tiny; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_utiny; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_short; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_ushort; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_long; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_ulong; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_longlong; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_ulonglong; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_longlong; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_ulonglong; @@ -131,14 +157,14 @@ namespace odb // Float types. // template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_float; }; template <> - class value_traits: public odb::value_traits + class value_traits: public generic_value_traits { public: static const image_id_type image_id = id_double; @@ -150,11 +176,12 @@ namespace odb class value_traits { public: + typedef std::string type; typedef std::string value_type; static const image_id_type image_id = id_string; static void - set_value (value_type& v, const char* s, std::size_t n, bool is_null) + set_value (std::string& v, const char* s, std::size_t n, bool is_null) { if (!is_null) v.assign (s, n); @@ -167,7 +194,7 @@ namespace odb std::size_t c, std::size_t& n, bool& is_null, - const value_type& v) + const std::string& v) { is_null = false; n = v.size (); @@ -183,7 +210,7 @@ namespace odb set_image (buffer& b, std::size_t& n, bool& is_null, - const value_type& v) + const std::string& v) { is_null = false; n = v.size (); @@ -204,6 +231,7 @@ namespace odb class value_traits { public: + typedef const char* type; typedef const char* value_type; static const image_id_type image_id = id_string; @@ -212,7 +240,7 @@ namespace odb std::size_t c, std::size_t& n, bool& is_null, - value_type v) + const char* v) { is_null = false; n = std::strlen (v); @@ -228,7 +256,7 @@ namespace odb set_image (buffer& b, std::size_t& n, bool& is_null, - const value_type& v) + const char* v) { is_null = false; n = std::strlen (v); -- cgit v1.1