14#ifndef DENSESINGLYINDEXED_HPP_
15#define DENSESINGLYINDEXED_HPP_
23 namespace InterpreterClass
27 template<
class ValueClass >
49 {
return (*
this)( soughtIndex ); }
52 {
return (*
this)( soughtIndex ); }
54 hasEntry(
int const soughtIndex )
const;
56 virtual std::string
const&
80 template<
class ValueClass >
90 template<
class ValueClass >
98 template<
class ValueClass >
106 return findOrMakeEntry( soughtIndex );
109 template<
class ValueClass >
110 inline ValueClass
const&
112 int const soughtIndex )
const
118 if( hasEntry( soughtIndex ) )
120 return valueVector[ soughtIndex - 1 ];
124 return this->defaultUnsetValue;
128 template<
class ValueClass >
132 if( ( 0 < soughtIndex )
134 ( (
size_t)soughtIndex <= valueVector.size() ) )
144 template<
class ValueClass >
145 inline std::string
const&
149 this->stringInterpretation.clear();
150 for(
size_t soughtIndex( 1 );
151 valueVector.size() >= soughtIndex;
154 this->indexPrintingVector[ 0 ] = soughtIndex;
155 this->stringInterpretation.append( this->indicesToPrintingString() );
158 this->stringInterpretation.append( this->valueToPrintingString(
159 findOrMakeEntry( soughtIndex ) ) );
160 this->stringInterpretation.append(
"\n" );
162 return this->stringInterpretation;
165 template<
class ValueClass >
174 template<
class ValueClass >
177 int const soughtIndex )
181 if( valueVector.size() < (
size_t)soughtIndex )
183 valueVector.resize( soughtIndex,
184 this->defaultUnsetValue );
186 return valueVector[ soughtIndex - 1 ];
189 template<
class ValueClass >
193 for(
int whichLine( this->currentStringBlock->getNumberOfBodyLines() );
198 (*(this->currentStringBlock))[ whichLine ].first,
199 &(this->lineRemainderA),
201 if( !(this->currentWord.empty()) )
206 this->lineRemainderA,
208 if( ( 0 < recordingIndex )
210 !(this->currentWord.empty()) )
212 findOrMakeEntry( recordingIndex )
213 = this->stringToValue( this->currentWord );
215 else if( this->isVerbose )
219 <<
"LHPC::SLHA::error! expected to find 1 positive index then a"
220 <<
" value, instead found \""
221 << (*(this->currentStringBlock))[ whichLine ].first <<
"\"";
222 std::cout << std::endl;
static std::string firstWordOf(std::string const &stringToParse, std::string *const remainderString=NULL, std::string const &separatorChars=whitespaceChars)
static std::string const whitespaceAndNewlineChars
static std::string trimFromFrontAndBack(std::string const &stringToTrim, std::string const &charsToTrim=whitespaceAndNewlineChars)
static int stringToInt(std::string const &stringToInterpret)
virtual void interpretCurrentStringBlock()
virtual std::string const & getAsString()
virtual ~DenseSinglyIndexed()
ValueClass const & operator[](int const soughtIndex) const
ValueClass & findOrMakeEntry(int const soughtIndex)
virtual void clearEntries()
ValueClass & operator()(int const soughtIndex)
ValueClass & operator[](int const soughtIndex)
bool hasEntry(int const soughtIndex) const
std::vector< ValueClass > valueVector