X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fstlplus%2Fstrings%2Fstring_utilities.hpp;h=369477dc8bf8d5af7de2da081d0a6fef5157bd70;hp=d8d39c4770eeff5ab6bba85f169bebd875ac8b75;hb=5846afb00833cc72fe72422ca896d2387c712cb4;hpb=6b0a0d0efafe34d48ab344fca3b479553bd4e62c diff --git a/src/stlplus/strings/string_utilities.hpp b/src/stlplus/strings/string_utilities.hpp index d8d39c4..369477d 100644 --- a/src/stlplus/strings/string_utilities.hpp +++ b/src/stlplus/strings/string_utilities.hpp @@ -1,120 +1,120 @@ -#ifndef STLPLUS_STRING_UTILITIES -#define STLPLUS_STRING_UTILITIES -//////////////////////////////////////////////////////////////////////////////// - -// Author: Andy Rushton -// Copyright: (c) Southampton University 1999-2004 -// (c) Andy Rushton 2004-2009 -// License: BSD License, see ../docs/license.html - -// Utilities for manipulating std::strings - -//////////////////////////////////////////////////////////////////////////////// -#include "strings_fixes.hpp" -#include "format_types.hpp" -#include -#include -#include -#include - -namespace stlplus -{ - - //////////////////////////////////////////////////////////////////////////////// - // Padding function allows a string to be printed in a fixed-width field - //////////////////////////////////////////////////////////////////////////////// - - // The definitions for the alignment are declared in format_types.hpp - // Any other value will cause std::invalid_argument to be thrown - - std::string pad(const std::string& str, - alignment_t alignment, - unsigned width, - char padch = ' ') - throw(std::invalid_argument); - - //////////////////////////////////////////////////////////////////////////////// - // whitespace trimming - //////////////////////////////////////////////////////////////////////////////// - - std::string trim_left(const std::string& val); - std::string trim_right(const std::string& val); - std::string trim(const std::string& val); - - //////////////////////////////////////////////////////////////////////////////// - // case conversion for std::strings - //////////////////////////////////////////////////////////////////////////////// - - std::string lowercase(const std::string& val); - std::string uppercase(const std::string& val); - - //////////////////////////////////////////////////////////////////////////////// - // character translation - inspired by Unix 'tr' command - //////////////////////////////////////////////////////////////////////////////// - - // convert characters represented in from_set to the characters in the same position in to_set - // for example: - // filename = translate(filename,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"); - // converts the filename to uppercase and returns the result (Note that the - // uppercase function does this more easily). If the from_set is longer than - // the to_set, then the overlap represents characters to delete (i.e. they map - // to nothing) - - std::string translate(const std::string& input, - const std::string& from_set, - const std::string& to_set = std::string()); - - //////////////////////////////////////////////////////////////////////////////// - // wildcard matching - //////////////////////////////////////////////////////////////////////////////// - - // this function does wildcard matching of the wildcard expression against the candidate std::string - // wildcards are NOT regular expressions - // the wildcard characters are * and ? where * matches 1 or more characters and ? matches only one - // there are also character sets [a-z] [qwertyuiop] etc. which match 1 character - // TODO: character sets like [:alpha:] - // TODO eventually: regular expression matching and substitution (3rd party library?) - - bool match_wildcard(const std::string& wild, - const std::string& match); - - //////////////////////////////////////////////////////////////////////////////// - // Perl-inspired split/join functions - //////////////////////////////////////////////////////////////////////////////// - - // splits the string at every occurance of splitter and adds it as a separate string to the return value - // the splitter is removed - // a string with no splitter in it will give a single-value vector - // an empty string gives an empty vector - - std::vector split (const std::string& str, - const std::string& splitter = "\n"); - - // the reverse of the above - // joins the string vector to create a single string with the joiner inserted between the joins - // Note: the joiner will not be added at the beginning or the end - // However, there are optional fields to add such prefix and suffix strings - - std::string join (const std::vector&, - const std::string& joiner = "\n", - const std::string& prefix = "", - const std::string& suffix = ""); - - //////////////////////////////////////////////////////////////////////////////// - // special displays - //////////////////////////////////////////////////////////////////////////////// - - // display the parameter as a number in bytes, kbytes, Mbytes, Gbytes depending on range - - std::string display_bytes(long bytes); - - // display the parameter in seconds as a string representation in weeks, days, hours, minutes, seconds - // e.g. "1d 1:01:01" means 1 day, 1 hour, 1 minute and 1 second - - std::string display_time(time_t seconds); - - //////////////////////////////////////////////////////////////////////////////// - -} // end namespace stlplus - -#endif +#ifndef STLPLUS_STRING_UTILITIES +#define STLPLUS_STRING_UTILITIES +//////////////////////////////////////////////////////////////////////////////// + +// Author: Andy Rushton +// Copyright: (c) Southampton University 1999-2004 +// (c) Andy Rushton 2004-2009 +// License: BSD License, see ../docs/license.html + +// Utilities for manipulating std::strings + +//////////////////////////////////////////////////////////////////////////////// +#include "strings_fixes.hpp" +#include "format_types.hpp" +#include +#include +#include +#include + +namespace stlplus +{ + + //////////////////////////////////////////////////////////////////////////////// + // Padding function allows a string to be printed in a fixed-width field + //////////////////////////////////////////////////////////////////////////////// + + // The definitions for the alignment are declared in format_types.hpp + // Any other value will cause std::invalid_argument to be thrown + + std::string pad(const std::string& str, + alignment_t alignment, + unsigned width, + char padch = ' ') + throw(std::invalid_argument); + + //////////////////////////////////////////////////////////////////////////////// + // whitespace trimming + //////////////////////////////////////////////////////////////////////////////// + + std::string trim_left(const std::string& val); + std::string trim_right(const std::string& val); + std::string trim(const std::string& val); + + //////////////////////////////////////////////////////////////////////////////// + // case conversion for std::strings + //////////////////////////////////////////////////////////////////////////////// + + std::string lowercase(const std::string& val); + std::string uppercase(const std::string& val); + + //////////////////////////////////////////////////////////////////////////////// + // character translation - inspired by Unix 'tr' command + //////////////////////////////////////////////////////////////////////////////// + + // convert characters represented in from_set to the characters in the same position in to_set + // for example: + // filename = translate(filename,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + // converts the filename to uppercase and returns the result (Note that the + // uppercase function does this more easily). If the from_set is longer than + // the to_set, then the overlap represents characters to delete (i.e. they map + // to nothing) + + std::string translate(const std::string& input, + const std::string& from_set, + const std::string& to_set = std::string()); + + //////////////////////////////////////////////////////////////////////////////// + // wildcard matching + //////////////////////////////////////////////////////////////////////////////// + + // this function does wildcard matching of the wildcard expression against the candidate std::string + // wildcards are NOT regular expressions + // the wildcard characters are * and ? where * matches 1 or more characters and ? matches only one + // there are also character sets [a-z] [qwertyuiop] etc. which match 1 character + // TODO: character sets like [:alpha:] + // TODO eventually: regular expression matching and substitution (3rd party library?) + + bool match_wildcard(const std::string& wild, + const std::string& match); + + //////////////////////////////////////////////////////////////////////////////// + // Perl-inspired split/join functions + //////////////////////////////////////////////////////////////////////////////// + + // splits the string at every occurance of splitter and adds it as a separate string to the return value + // the splitter is removed + // a string with no splitter in it will give a single-value vector + // an empty string gives an empty vector + + std::vector split (const std::string& str, + const std::string& splitter = "\n"); + + // the reverse of the above + // joins the string vector to create a single string with the joiner inserted between the joins + // Note: the joiner will not be added at the beginning or the end + // However, there are optional fields to add such prefix and suffix strings + + std::string join (const std::vector&, + const std::string& joiner = "\n", + const std::string& prefix = "", + const std::string& suffix = ""); + + //////////////////////////////////////////////////////////////////////////////// + // special displays + //////////////////////////////////////////////////////////////////////////////// + + // display the parameter as a number in bytes, kbytes, Mbytes, Gbytes depending on range + + std::string display_bytes(long bytes); + + // display the parameter in seconds as a string representation in weeks, days, hours, minutes, seconds + // e.g. "1d 1:01:01" means 1 day, 1 hour, 1 minute and 1 second + + std::string display_time(time_t seconds); + + //////////////////////////////////////////////////////////////////////////////// + +} // end namespace stlplus + +#endif