55 #include "../Util/ArrayOfString.hpp"
56 #include "../Util/Exception.hpp"
58 std::ostream&
NOMAD::operator<<(std::ostream& out,
const NOMAD::ArrayOfString& arrayOfString)
60 out << arrayOfString.display();
69 NOMAD::ArrayOfString::ArrayOfString(
size_t n,
const std::string& initString)
72 for (
size_t i = 0; i < n; i++)
74 _array.push_back(initString);
79 NOMAD::ArrayOfString::ArrayOfString(
const std::string & inputString,
80 const std::string & separators)
83 _array = splitString(inputString, separators);
90 NOMAD::ArrayOfString::~ArrayOfString()
98 const std::string& NOMAD::ArrayOfString::operator[](
size_t index)
const
100 if ( index >= _array.size())
102 std::ostringstream oss;
103 oss <<
"ArrayOfString: index = " << index <<
" is out of bounds [0, " << _array.size()-1 <<
"]";
104 throw NOMAD::Exception(__FILE__, __LINE__, oss.str());
107 return _array[index];
117 void NOMAD::ArrayOfString::replace(
const size_t index,
const std::string& s)
119 if ( index >= _array.size())
121 std::ostringstream oss;
122 oss <<
"ArrayOfString: index = " << index <<
" is out of bounds [0, " << _array.size()-1 <<
"]";
123 throw NOMAD::Exception(__FILE__, __LINE__, oss.str());
133 bool NOMAD::ArrayOfString::erase(
const size_t index)
136 std::vector<std::string>::const_iterator it;
138 for (it = _array.begin(); it != _array.end(); ++it)
154 int NOMAD::ArrayOfString::find(
const std::string& s)
const
158 for (
size_t i = 0; i < _array.size(); i++)
176 return (_array == array._array);
183 std::string NOMAD::ArrayOfString::display()
const
190 for (
size_t i = 0; i < size(); i++)
208 std::vector<std::string>
const
209 NOMAD::ArrayOfString::splitString(
const std::string & inputString,
210 const std::string & separators)
212 std::vector<std::string> array;
214 if (inputString.size() == 0)
219 size_t splitIndex = 0, index1 = 0, length;
226 while (splitIndex != std::string::npos)
229 index1 = inputString.find_first_not_of(separators, index1);
230 if (index1 == std::string::npos)
234 splitIndex = inputString.find_first_of(separators, index1+1);
235 if (splitIndex == std::string::npos)
237 length = inputString.size() - index1;
241 length = splitIndex - index1;
244 std::string si = inputString.substr(index1, length);
247 index1 = splitIndex + 1;
254 NOMAD::ArrayOfString NOMAD::ArrayOfString::combineAndAddPadding(
const NOMAD::ArrayOfString & s1,
const NOMAD::ArrayOfString & s2)
259 size_t sizeS1 = s1.size();
260 if (sizeS1 != s2.size() )
262 throw NOMAD::Exception(__FILE__, __LINE__,
"s1 and s2 must have the same of number of elements.");
267 for (
size_t e = 0 ; e < sizeS1 ; e++)
269 maxL =
std::max(maxL,s1[e].length()+s2[e].length());
273 NOMAD::ArrayOfString paddedString(
"\n");
274 for (
size_t e = 0 ; e < sizeS1 ; e++)
276 size_t padL = 1 + maxL - s1[e].length() - s2[e].length();
277 std::string padS = s1[e];
278 padS.insert(s1[e].length(), padL,
' ');
280 paddedString.add(padS);