Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
Panzer_String_Utilities.cpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Panzer: A partial differential equation assembly
5
// engine for strongly coupled complex multiphysics systems
6
// Copyright (2011) Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39
// Eric C. Cyr (eccyr@sandia.gov)
40
// ***********************************************************************
41
// @HEADER
42
43
#include "
Panzer_String_Utilities.hpp
"
44
#include <sstream>
45
46
namespace
panzer
{
47
48
void
trim
(std::string& str)
49
{
50
const
std::string whitespace(
" \t\n"
);
51
52
const
auto
strBegin = str.find_first_not_of(whitespace);
53
if
(strBegin == std::string::npos) {
54
str =
""
;
55
return
;
// no content
56
}
57
58
const
auto
strEnd = str.find_last_not_of(whitespace);
59
const
auto
strRange = strEnd - strBegin + 1;
60
61
str = str.substr(strBegin, strRange);
62
return
;
63
}
64
65
void
StringTokenizer
(std::vector<std::string>& tokens,
66
const
std::string& str,
67
const
std::string delimiters,
bool
trim
)
68
{
69
using
std::string;
70
71
// Skip delimiters at beginning.
72
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
73
// Find first "non-delimiter".
74
string::size_type pos = str.find_first_of(delimiters, lastPos);
75
76
while
(string::npos != pos || string::npos != lastPos) {
77
78
// grab token, trim if desired
79
std::string token = str.substr(lastPos,pos-lastPos);
80
if
(
trim
)
81
panzer::trim
(token);
82
83
// Found a token, add it to the vector.
84
tokens.push_back(token);
85
86
if
(pos==string::npos)
87
break
;
88
89
// Skip delimiters. Note the "not_of"
90
lastPos = str.find_first_not_of(delimiters, pos);
91
// Find next "non-delimiter"
92
pos = str.find_first_of(delimiters, lastPos);
93
}
94
95
}
96
97
void
TokensToDoubles
(std::vector<double> & values,
const
std::vector<std::string> & tokens)
98
{
99
// turn tokens into doubles (its a miracle!)
100
for
(std::size_t i=0;i<tokens.size();i++) {
101
double
value = 0.0;
102
std::stringstream ss;
103
ss << tokens[i];
104
ss >> value;
105
106
values.push_back(value);
107
}
108
}
109
110
void
TokensToInts
(std::vector<int> & values,
const
std::vector<std::string> & tokens)
111
{
112
// turn tokens into doubles (its a miracle!)
113
for
(std::size_t i=0;i<tokens.size();i++) {
114
int
value = 0;
115
std::stringstream ss;
116
ss << tokens[i];
117
ss >> value;
118
119
values.push_back(value);
120
}
121
}
122
}
Panzer_String_Utilities.hpp
panzer
Computes .
Definition
Panzer_BasisValues_Evaluator_decl.hpp:54
panzer::TokensToInts
void TokensToInts(std::vector< int > &values, const std::vector< std::string > &tokens)
Turn a vector of tokens into a vector of ints.
Definition
Panzer_String_Utilities.cpp:110
panzer::StringTokenizer
void StringTokenizer(std::vector< std::string > &tokens, const std::string &str, const std::string delimiters, bool trim)
Tokenize a string, put tokens in a vector.
Definition
Panzer_String_Utilities.cpp:65
panzer::trim
void trim(std::string &str)
Removes whitespace at beginning and end of string.
Definition
Panzer_String_Utilities.cpp:48
panzer::TokensToDoubles
void TokensToDoubles(std::vector< double > &values, const std::vector< std::string > &tokens)
Turn a vector of tokens into a vector of doubles.
Definition
Panzer_String_Utilities.cpp:97
Generated by
1.17.0