/* * 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 . * */ /*! \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 #include #include #include #include #include #include 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 split(const std::string& str, char delimiter, int limit = 0); static std::vector split(const std::string& str, const std::string& delimiter, int limit = 0); static std::string join(std::vector 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& 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 static bool lexicalCast(S source, T& target) { std::stringstream interpreter; if(!(interpreter << source) || !(interpreter >> target) || !(interpreter >> std::ws).eof()) { return false; } return true; } }; } #endif