Newer
Older
Sofia Antony
committed
#ifndef MANTID_KERNEL_RANGESTRINGPARSER_H_
#define MANTID_KERNEL_RANGESTRINGPARSER_H_
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
Gigg, Martyn Anthony
committed
#include "MantidKernel/DllConfig.h"
#ifndef Q_MOC_RUN
#include <boost/tokenizer.hpp>
#include <boost/shared_ptr.hpp>
Sofia Antony
committed
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <vector>
namespace Mantid {
namespace Kernel {
/** This class parses a given string into vector of vectors of numbers.
For example : 60,61+62,63-66,67:70,71-75:2 This gives a vector containing 8
vectors
as Vec[8] and Vec[0] is a vector containing 1 element 60
Vec[1] is a vector containing elements 61,62 Vec[2] is a vector containing
elements 63,64,65,66,
Vec[3] is a vector containing element 67,Vec[4] is a vector containing element
68,
Vec[5] is a vector containing element 69,Vec[6] is a vector containing element
70 ,
vec[7] is a vector containing element 71,73,75
@author Sofia Antony, Rutherford Appleton Laboratory
@date 27/01/2011
Copyright © 2010-2011 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
National Laboratory & European Spallation Source
This file is part of Mantid.
Mantid is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
Mantid 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
File change history is stored at: <https://github.com/mantidproject/mantid>.
Code Documentation is available at: <http://doxygen.mantidproject.org>
*/
class MANTID_KERNEL_DLL UserStringParser {
public:
/// parses a given string into a vector of vector of numbers
std::vector<std::vector<unsigned int>> parse(const std::string &userString);
private:
/// separate a given string to a vector of comma separated strings
std::vector<std::string> separateComma(const std::string &);
/// separates a given string to vector of vector of numbers using colon as the
/// delimeter
std::vector<std::vector<unsigned int>>
separateColon(const std::string &input);
/// separate delimiter string from input string and return a vector of numbers
/// created from the separated string
std::vector<unsigned int> separateDelimiters(const std::string &input,
Lamar Moore
committed
const std::string &delimiters);
/// converts a string to int.
unsigned int toUInt(const std::string &input);
/// This method checks the input string contains the character ch
bool Contains(const std::string &input, char ch);
/// This method removes the separator string from the input string and
/// converts the tokens to unisgned int
Lamar Moore
committed
void Tokenize(const std::string &input, const std::string &delimiter,
unsigned int &start, unsigned int &end, unsigned int &step);
/// convert the string into numbers
void parse(const std::string &userString,
std::vector<std::vector<unsigned int>> &numbers);
/// validates the input string
bool isValid(const std::string &input, std::vector<std::string> &tokens);
/// converts the parsed tokens to numbers
void convertToNumbers(const std::string &input,
const std::vector<std::string> &tokens,
unsigned int &start, unsigned int &end,
unsigned int &step);
// returns true if the separator before the step string is valid
bool isValidStepSeparator(const std::string &input,
Sofia Antony
committed
}
}