Program Listing for File SplitJoin.h

Program Listing for File SplitJoin.h#

Return to documentation for file (src/util/StringUtility/SplitJoin.h)

#ifndef ROSE_StringUtility_SplitJoin_H
#define ROSE_StringUtility_SplitJoin_H

#include <Constants.h>
#include <rosedll.h>

#include <list>
#include <sstream>
#include <string>
#include <vector>

namespace Rose {
namespace StringUtility {

//                                      Splitting and joining strings

ROSE_UTIL_API std::vector<std::string> split(const std::string &separator, const std::string &str, size_t maxparts = UNLIMITED,
                                             bool trim_white_space = false);
ROSE_UTIL_API std::vector<std::string> split(char separator, const std::string &str, size_t maxparts = UNLIMITED,
                                             bool trim_white_space = false);
ROSE_UTIL_API std::list<std::string> tokenize(const std::string&, char delim);

template<class Iterator>
std::string join_range(const std::string &separator, Iterator begin, Iterator end) {
    std::ostringstream retval;
    for (Iterator i=begin; i!=end; ++i)
        retval <<(i==begin ? std::string() : separator) <<*i;
    return retval.str();
}

template<class Container>
std::string join(const std::string &separator, const Container &container) {
    return join_range(separator, container.begin(), container.end());
}

template<class Container>
std::string join(char separator, const Container &container) {
    return join_range(std::string(1, separator), container.begin(), container.end());
}

ROSE_UTIL_API std::string join(const std::string &separator, char *strings[], size_t nstrings);
ROSE_UTIL_API std::string join(const std::string &separator, const char *strings[], size_t nstrings);
ROSE_UTIL_API std::string join(char separator, char *strings[], size_t nstrings);
ROSE_UTIL_API std::string join(char separator, const char *strings[], size_t nstrings);

ROSE_UTIL_API std::string joinEnglish(const std::vector<std::string> &phrases,
                                      const std::string &separator = ",",
                                      const std::string &finalIntro = "and");

//                                      Container versus scalar functions
//
// Functions that convert containers of things to a string and vice versa.

ROSE_UTIL_API std::string listToString(const std::list<int>&, bool separateStrings = false);

ROSE_UTIL_API std::string listToString(const std::list<std::string>&, bool separateStrings = false);
ROSE_UTIL_API std::string listToString(const std::vector<std::string>&, bool separateStrings = false);
ROSE_UTIL_API std::list<std::string> stringToList(const std::string&);

ROSE_UTIL_API void splitStringIntoStrings(const std::string& inputString, char separator, std::vector<std::string>& stringList);

} // namespace
} // namespace

#endif