X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/libs/srvconf/parsers/resetable_utils.h diff --git a/libs/srvconf/parsers/resetable_utils.h b/libs/srvconf/parsers/resetable_utils.h new file mode 100644 index 00000000..6f026adf --- /dev/null +++ b/libs/srvconf/parsers/resetable_utils.h @@ -0,0 +1,141 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#ifndef __STG_STGLIBS_SRVCONF_RESETABLE_UTILS_H__ +#define __STG_STGLIBS_SRVCONF_RESETABLE_UTILS_H__ + +#include "stg/resetable.h" +#include "stg/common.h" + +#include +#include + +namespace STG +{ + +template +inline +void appendTag(std::ostream & stream, const std::string & name, const T & value) +{ + stream << "<" << name << " value=\"" << value << "\"/>"; +} + +template +inline +void appendTag(std::ostream & stream, const std::string & name, size_t suffix, const T & value) +{ + stream << "<" << name << suffix << " value=\"" << value << "\"/>"; +} + +template <> +inline +void appendTag(std::ostream & stream, const std::string & name, const uint8_t & value) +{ + stream << "<" << name << " value=\"" << static_cast(value) << "\"/>"; +} + +template <> +inline +void appendTag(std::ostream & stream, const std::string & name, const int8_t & value) +{ + stream << "<" << name << " value=\"" << static_cast(value) << "\"/>"; +} + +template +inline +void appendAttr(std::ostream & stream, const std::string & name, const T & value) +{ + stream << " " << name << "=\"" << value << "\""; +} + +template +inline +void appendAttr(std::ostream & stream, const std::string & name, size_t suffix, const T & value) +{ + stream << " " << name << suffix << "=\"" << value << "\""; +} + +template <> +inline +void appendAttr(std::ostream & stream, const std::string & name, const uint8_t & value) +{ + stream << " " << name << "=\"" << static_cast(value) << "\""; +} + +template <> +inline +void appendAttr(std::ostream & stream, const std::string & name, const int8_t & value) +{ + stream << " " << name << "=\"" << static_cast(value) << "\""; +} + +template +inline +void appendResetableTag(std::ostream & stream, const std::string & name, const T & value) +{ +if (!value.empty()) + appendTag(stream, name, value.const_data()); +} + +template +inline +void appendResetableTag(std::ostream & stream, const std::string & name, size_t suffix, const T & value) +{ +if (!value.empty()) + appendTag(stream, name, suffix, value.const_data()); +} + +template +inline +void appendResetableAttr(std::ostream & stream, const std::string & name, const T & value) +{ +if (!value.empty()) + appendAttr(stream, name, value.const_data()); +} + +template +inline +void appendResetableAttr(std::ostream & stream, const std::string & name, size_t suffix, const T & value) +{ +if (!value.empty()) + appendAttr(stream, name, suffix, value.const_data()); +} + +inline +RESETABLE MaybeEncode(const RESETABLE & value) +{ +RESETABLE res; +if (!value.empty()) + res = Encode12str(value.data()); +return res; +} + +inline +RESETABLE MaybeIconv(const RESETABLE & value, const std::string & fromEncoding, const std::string & toEncoding) +{ +RESETABLE res; +if (!value.empty()) + res = IconvString(value.data(), fromEncoding, toEncoding); +return res; +} + +} // namespace STG + +#endif