diff options
Diffstat (limited to 'include/mts/MTS_Text.h')
-rw-r--r-- | include/mts/MTS_Text.h | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/include/mts/MTS_Text.h b/include/mts/MTS_Text.h new file mode 100644 index 0000000..2380add --- /dev/null +++ b/include/mts/MTS_Text.h @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2015 by Multi-Tech Systems + * + * This file is part of libmts. + * + * libmts is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * libmts 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with libmts. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/*! \file MTS_Text.h + \brief A set of string formatting utilities + \date 15JUN11 + \author Sean Godinez + + A set of string formatting utilities + */ + +#ifndef MTS_TEXT_H_ +#define MTS_TEXT_H_ + +#include <mts/MTS_NonConstructable.h> +#include <mts/MTS_Stdint.h> +#include <mts/MTS_Buffer.h> +#include <sstream> +#include <string> +#include <vector> +#include <time.h> + +namespace MTS { + + class Text: private NonConstructable { + + public: + + enum DATEFORMAT { + MMsDDsYY, //MM/DD/YYYY + MMsDDsYY_HHcMMcSS, //MM/DD/YYYY HH:MM:SS:mmm + RFC_1123 //Wdy, DD Mon YYYY HH:MM:SS GMT (Thu, 01 Jan 1970 00:00:01 GMT) + }; + + enum TIMEFORMAT { + HHcMMcSScmmm, //HH:MM:SS:mmm + HHcMMcSS //HH:MM:SS + }; + + static const uint8_t RDSTATE_SUCCESS_MASK = 0x02; //Only OEF bit + + static std::string time(const uint64_t& iTimeMicros, const TIMEFORMAT& eTime = HHcMMcSScmmm); + static std::string date(const tm& stTime, const DATEFORMAT& eDate = MMsDDsYY); + static bool datetimeIsBefore(const std::string& time1, const std::string& time2); + + static std::vector<std::string> split(const std::string& str, char delimiter, int limit = 0); + static std::vector<std::string> split(const std::string& str, const std::string& delimiter, int limit = 0); + static std::string join(std::vector<std::string> list, char delimiter); + static std::string replace(const std::string& str, const std::string& from, const std::string& to); + static uint32_t count(const std::string& str, const std::string& element); + static uint32_t count(const std::string& str, const uint8_t& element); + static bool endsWith(const std::string& str, const std::string& key); + + static std::string getLine(const std::string& source, const size_t& start, size_t& cursor); + + static std::string trim(const std::string& str); + static std::string trim(const std::string& str, const uint8_t& element); + static std::string strip(const std::string& str, const std::vector<uint8_t>& elements); + static std::string strip(const std::string& str, const uint8_t& element); + + static std::string toLowerCase(const std::string& str); + static std::string toUpperCase(const std::string& str); + static std::string toCapitalized(const std::string& str); + static std::string toCamelCase(const std::string& str); + static std::string toCommandLineEscaped(const std::string& str); + + static std::wstring widen(const std::string& str); + static std::string narrow(const std::wstring& str); + + static std::string format(bool value); + static std::string format(double value, std::streamsize percision = 6); + + static std::string format(int8_t value); + static std::string format(int16_t value); + static std::string format(int32_t value); + static std::string format(int64_t value); + + static std::string format(uint8_t value); + static std::string format(uint16_t value); + static std::string format(uint32_t value); + static std::string format(uint64_t value); + + static std::string formatHex(int8_t value, bool pad = false); + static std::string formatHex(int16_t value, bool pad = false); + static std::string formatHex(int32_t value, bool pad = false); + static std::string formatHex(int64_t value, bool pad = false); + + static std::string formatHex(uint8_t value, bool pad = false); + static std::string formatHex(uint16_t value, bool pad = false); + static std::string formatHex(uint32_t value, bool pad = false); + static std::string formatHex(uint64_t value, bool pad = false); + + static std::string formatHex(const Buffer& value); + + static bool parse(bool& value, const std::string& str); + static bool parse(double& value, const std::string& str); + + static bool parse(int8_t& value, const std::string& str); + static bool parse(int16_t& value, const std::string& str); + static bool parse(int32_t& value, const std::string& str); + static bool parse(int64_t& value, const std::string& str); + + static bool parse(uint8_t& value, const std::string& str); + static bool parse(uint16_t& value, const std::string& str); + static bool parse(uint32_t& value, const std::string& str); + static bool parse(uint64_t& value, const std::string& str); + + static bool parseHex(uint8_t& value, const std::string& str); + static bool parseHex(uint16_t& value, const std::string& str); + static bool parseHex(uint32_t& value, const std::string& str); + static bool parseHex(uint64_t& value, const std::string& str); + + template<typename S, typename T> + static bool lexicalCast(S source, T& target) { + std::stringstream interpreter; + if(!(interpreter << source) || + !(interpreter >> target) || + !(interpreter >> std::ws).eof()) { + return false; + } + return true; + } + }; +} + +#endif |