Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/util/substring.h @ 10657

Last change on this file since 10657 was 9869, checked in by bensch, 18 years ago

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

File size: 5.2 KB
RevLine 
[4597]1/*!
[7325]2 * @file substring.h
3 * @brief a small class to get the parts of a string separated by commas
[9406]4 *
5 * This class is also identified as a Tokenizer. It splits up one long
6 * String into multiple small ones by a designated Delimiter.
7 *
8 * Substring is Advanced, and it is possible, to split a string by ','
9 * but also removing leading and trailing spaces around the comma.
10 *
11 * @example
12 * Split the String std::string st = "1345, The new empire   , is , orxonox"
13 * is splitted with:
14 * SubString(st, ',', " \n\t")
15 * into
16 * "1345", "The new empire", "is", "orxonox"
17 * As you can see, the useless spaces around ',' were removed.
[7325]18 */
[3941]19
[9406]20#ifndef __SUBSTRING_H__
21#define __SUBSTRING_H__
[4220]22
[7221]23#include <vector>
24#include <string>
25
26
[4482]27//! A class that can load one string and split it in multipe ones
[7319]28/**
29 * SubString is a very Powerfull way to create a SubSet from a String
30 * It can be used, to Split strings append them and join them again.
31 */
[3941]32class SubString
33{
[7319]34public:
[9869]35  //! An enumerator for the State the Parser is in
[7474]36  typedef enum {
[9869]37    SL_NORMAL,            //!< Normal state
38    SL_ESCAPE,            //!< After an escape character
39    SL_SAFEMODE,          //!< In safe mode (between "" mostly).
40    SL_SAFEESCAPE,        //!< In safe mode with the internal escape character, that escapes even the savemode character.
41    SL_COMMENT,           //!< In Comment mode.
[7474]42  } SPLIT_LINE_STATE;
43
44
45public:
[7323]46  SubString();
[7474]47  SubString(const std::string& string, char delimiter = ',');
48  SubString(const std::string& string,
49            const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries=false,
50            char escapeChar ='\\', char safemode_char = '"', char comment_char = '\0');
[9869]51  SubString(unsigned int argc, const char** argv);
[7319]52  /** @brief create a Substring as a copy of another one. @param subString the SubString to copy. */
53  SubString(const SubString& subString) { *this = subString; };
54  SubString(const SubString& subString, unsigned int subSetBegin);
55  SubString(const SubString& subString, unsigned int subSetBegin, unsigned int subSetEnd);
[4220]56  ~SubString();
[4597]57
[7319]58  // operate on the SubString
59  SubString& operator=(const SubString& subString);
[7398]60  bool operator==(const SubString& subString) const;
61  bool compare(const SubString& subString) const;
62  bool compare(const SubString& subString, unsigned int length) const;
[7319]63  SubString operator+(const SubString& subString) const;
64  SubString& operator+=(const SubString& subString);
65  /** @param subString the String to append @returns appended String. @brief added for convenience */
66  SubString& append(const SubString subString) { return (*this += subString); };
67
68  /////////////////////////////////////////
69  // Split and Join the any String. ///////
[7474]70  unsigned int split(const std::string& string = "", char delimiter = ',');
71  unsigned int split(const std::string& string,
72                     const std::string& delimiters, const std::string& delimiterNeighbours = "", bool emptyEntries = false,
73                     char escapeChar ='\\', char safemode_char = '"', char comment_char = '\0');
[7320]74  std::string join(const std::string& delimiter = " ") const;
[7319]75  ////////////////////////////////////////
[6648]76
[7319]77  // retrieve a SubSet from the String
[9406]78  SubString subSet(unsigned int subSetBegin) const;
79  SubString subSet(unsigned int subSetBegin, unsigned int subSetEnd) const;
[4597]80
[7319]81  // retrieve Information from within
[7340]82  /** @returns true if the SubString is empty */
83  inline bool empty() const { return this->strings.empty(); };
84  /** @returns the count of Strings stored in this substring */
[7319]85  inline unsigned int size() const { return this->strings.size(); };
[7340]86  /** @param i the i'th String @returns the i'th string from the subset of Strings */
[9406]87  inline const std::string& operator[](unsigned int i) const { return this->strings[i]; };
[7340]88  /** @param i the i'th String @returns the i'th string from the subset of Strings */
[8408]89  inline const std::string& getString(unsigned int i) const { return (*this)[i]; };
[9406]90  /** @returns the front of the StringList. */
91  inline const std::string& front() const { return this->strings.front(); };
92  /** @returns the back of the StringList. */
93  inline const std::string& back() const { return this->strings.back(); };
94  /** @brief removes the back of the strings list. */
95  inline void pop_back() { this->strings.pop_back(); };
[7319]96
97  // the almighty algorithm.
[7320]98  static SPLIT_LINE_STATE splitLine(std::vector<std::string>& ret,
99                                    const std::string& line,
[7325]100                                    const std::string& delimiters = SubString::WhiteSpaces,
[7474]101                                    const std::string& delimiterNeighbours = "",
102                                    bool emptyEntries = false,
[7320]103                                    char escape_char = '\\',
104                                    char safemode_char = '"',
105                                    char comment_char = '\0',
[7221]106                                    SPLIT_LINE_STATE start_state = SL_NORMAL);
[7319]107  // debugging.
[4833]108  void debug() const;
109
[7325]110public:
111  static const std::string WhiteSpaces;
112  static const std::string WhiteSpacesWithComma;
[9869]113  static const SubString   NullSubString;
[7325]114
[7319]115private:
116  std::vector<std::string>  strings;                      //!< strings produced from a single string splitted in multiple strings
[3941]117};
118
[9406]119#endif /* __SUBSTRING_H__ */
Note: See TracBrowser for help on using the repository browser.