summaryrefslogtreecommitdiff
path: root/zenxml/cvrt_text.h
diff options
context:
space:
mode:
Diffstat (limited to 'zenxml/cvrt_text.h')
-rw-r--r--zenxml/cvrt_text.h222
1 files changed, 0 insertions, 222 deletions
diff --git a/zenxml/cvrt_text.h b/zenxml/cvrt_text.h
deleted file mode 100644
index 80664317..00000000
--- a/zenxml/cvrt_text.h
+++ /dev/null
@@ -1,222 +0,0 @@
-// **************************************************************************
-// * This file is part of the zen::Xml project. It is distributed under the *
-// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *
-// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
-// **************************************************************************
-
-#ifndef ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434
-#define ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434
-
-#include <zen/utf.h>
-#include <zen/string_tools.h>
-
-namespace zen
-{
-/**
-\file
-\brief Handle conversion of string-convertible types to and from std::string.
-
-It is \b not required to call these functions directly. They are implicitly used by zen::XmlElement::getValue(),
-zen::XmlElement::setValue(), zen::XmlElement::getAttribute() and zen::XmlElement::setAttribute().
-\n\n
-Conversions for the following user types are supported by default:
- - strings - std::string, std::wstring, char*, wchar_t*, char, wchar_t, ect..., all STL-compatible-string-classes
- - numbers - int, double, float, bool, long, ect..., all built-in numbers
- - STL containers - std::map, std::set, std::vector, std::list, ect..., all STL-compatible-containers
- - std::pair
-
-You can add support for additional types via template specialization. \n\n
-Specialize zen::readStruc() and zen::writeStruc() to enable conversion from structured user types to XML elements.
-Specialize zen::readText() and zen::writeText() to enable conversion from string-convertible user types to std::string.
-Prefer latter if possible since it does not only enable conversions from XML elements to user data, but also from and to XML attributes.
-\n\n
-<b> Example: </b> type "bool"
-\code
-namespace zen
-{
-template <> inline
-void writeText(const bool& value, std::string& output)
-{
- output = value ? "true" : "false";
-}
-
-template <> inline
-bool readText(const std::string& input, bool& value)
-{
- std::string tmp = input;
- zen::trim(tmp);
- if (tmp == "true")
- value = true;
- else if (tmp == "false")
- value = false;
- else
- return false;
- return true;
-}
-}
-\endcode
-*/
-
-
-///Convert text to user data - used by XML elements and attributes
-/**
- \param input Input text.
- \param value Conversion target value.
- \return "true" if value was read successfully.
-*/
-template <class T> bool readText(const std::string& input, T& value);
-///Convert user data into text - used by XML elements and attributes
-/**
- \param value The value to be converted.
- \param output Output text.
-*/
-template <class T> void writeText(const T& value, std::string& output);
-
-
-/* Different classes of data types:
-
------------------------------
-| structured | readStruc/writeStruc - e.g. string-convertible types, STL containers, std::pair, structured user types
-| ------------------------- |
-| | to-string-convertible | | readText/writeText - e.g. string-like types, all built-in arithmetic numbers, bool
-| | --------------- | |
-| | | string-like | | | utfCvrtTo - e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...
-| | --------------- | |
-| ------------------------- |
------------------------------
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//------------------------------ implementation -------------------------------------
-
-//Conversion from arbitrary types to text (for use with XML elements and attributes)
-enum TextType
-{
- TEXT_TYPE_BOOL,
- TEXT_TYPE_NUMBER,
- TEXT_TYPE_STRING,
- TEXT_TYPE_OTHER,
-};
-
-template <class T>
-struct GetTextType : StaticEnum<TextType,
- IsSameType<T, bool>::value ? TEXT_TYPE_BOOL :
- IsStringLike<T>::value ? TEXT_TYPE_STRING : //string before number to correctly handle char/wchar_t -> this was an issue with Loki only!
- IsArithmetic<T>::value ? TEXT_TYPE_NUMBER : //
- TEXT_TYPE_OTHER> {};
-
-//######################################################################################
-
-template <class T, TextType type>
-struct ConvertText;
-/* -> expected interface
-{
- void writeText(const T& value, std::string& output) const;
- bool readText(const std::string& input, T& value) const;
-};
-*/
-
-//partial specialization: type bool
-template <class T>
-struct ConvertText<T, TEXT_TYPE_BOOL>
-{
- void writeText(bool value, std::string& output) const
- {
- output = value ? "true" : "false";
- }
- bool readText(const std::string& input, bool& value) const
- {
- std::string tmp = input;
- zen::trim(tmp);
- if (tmp == "true")
- value = true;
- else if (tmp == "false")
- value = false;
- else
- return false;
- return true;
- }
-};
-
-//partial specialization: handle conversion for all built-in arithmetic types!
-template <class T>
-struct ConvertText<T, TEXT_TYPE_NUMBER>
-{
- void writeText(const T& value, std::string& output) const
- {
- output = numberTo<std::string>(value);
- }
- bool readText(const std::string& input, T& value) const
- {
- value = stringTo<T>(input);
- return true;
- }
-};
-
-//partial specialization: handle conversion for all string-like types!
-template <class T>
-struct ConvertText<T, TEXT_TYPE_STRING>
-{
- void writeText(const T& value, std::string& output) const
- {
- output = utfCvrtTo<std::string>(value);
- }
- bool readText(const std::string& input, T& value) const
- {
- value = utfCvrtTo<T>(input);
- return true;
- }
-};
-
-
-//partial specialization: unknown type
-template <class T>
-struct ConvertText<T, TEXT_TYPE_OTHER>
-{
- //###########################################################################################################################################
- assert_static(sizeof(T) == -1);
- /*
- ATTENTION: The data type T is yet unknown to the zen::Xml framework!
-
- Please provide a specialization for T of the following two functions in order to handle conversions to XML elements and attributes
-
- template <> void zen::writeText(const T& value, std::string& output)
- template <> bool zen::readText(const std::string& input, T& value)
-
- If T is structured and cannot be converted to a text representation specialize these two functions to allow at least for conversions to XML elements:
-
- template <> void zen::writeStruc(const T& value, XmlElement& output)
- template <> bool zen::readStruc(const XmlElement& input, T& value)
- */
- //###########################################################################################################################################
-};
-
-
-template <class T> inline
-void writeText(const T& value, std::string& output)
-{
- ConvertText<T, GetTextType<T>::value>().writeText(value, output);
-}
-
-
-template <class T> inline
-bool readText(const std::string& input, T& value)
-{
- return ConvertText<T, GetTextType<T>::value>().readText(input, value);
-}
-}
-
-#endif //ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434
bgstack15