|
/********************************************************************
|
|
* CONFIDENTIAL - All source code is the propriety and confidential *
|
|
* information of David Sorber. *
|
|
* *
|
|
* Copyright 2024 David Sorber *
|
|
* Unpublished -- all rights reserved under the copyright laws *
|
|
* of the United States. *
|
|
********************************************************************/
|
|
#ifndef __COPYTOOL_UTILITIES_H_
|
|
#define __COPYTOOL_UTILITIES_H_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
static void tokenize(
|
|
const std::string& input,
|
|
const std::string& DELIMITER,
|
|
std::vector<std::string> &tokens)
|
|
{
|
|
size_t start = input.find_first_not_of(DELIMITER);
|
|
size_t end = start;
|
|
|
|
while (start != std::string::npos)
|
|
{
|
|
// Find next occurrence of delimiter
|
|
end = input.find(DELIMITER, start);
|
|
|
|
// Skip any DELIMITER chars that are immediately preceeded by a
|
|
// backslash (this allows the delimiter to be escaped)
|
|
while (end != 0 && (end < input.size() - 1) && input[end - 1] == '\\')
|
|
{
|
|
end = input.find(DELIMITER, end + 1);
|
|
}
|
|
|
|
// Push back the token found into vector
|
|
tokens.push_back(input.substr(start, end - start));
|
|
|
|
// Skip all occurrences of the delimiter to find new start
|
|
start = input.find_first_not_of(DELIMITER, end);
|
|
}
|
|
}
|
|
|
|
#endif
|