9void assembleMsgAndThrow [[noreturn]] (
const NString& error ) {
14 msg <<
"ERROR WHILE PARSING ENUMERATION RECORD STRING" <<
NEW_LINE
20 msg <<
"(Not resourced)";
22 <<
" Column: " << column + 1 <<
NEW_LINE
25 for(
integer i= column ; i >= 0 ; --i )
26 msg << (i != 0 ?
'-' :
'>');
29 throw std::runtime_error( msg.Terminate() );
41{ assembleMsgAndThrow(
NString256() << what <<
'.' ); }
44 if(
Input.IsNotEmpty()
46 assembleMsgAndThrow(
NString256() <<
"Found whitespaces "
52 assembleMsgAndThrow(
NString256() <<
"Found trailing whitespaces in string value \""
57 if(
Input.CharAtStart() == specificChar )
58 assembleMsgAndThrow(
NString256() <<
"Unnecessary character \""
60 <<
"\" found " << where );
65 if( !
Input.ConsumeChar(specificChar) )
66 assembleMsgAndThrow(
NString256() << where <<
'\"' << specificChar <<
'\"');
70 if (
Input.IsEmpty() )
74 assembleMsgAndThrow(
NString256() <<
"Expected outer delimiter or end of input" );
79 if ( !
Input.IsEmpty() )
80 assembleMsgAndThrow(
NString256() <<
"Expected end of parsable input string" );
89 bigInt= (std::numeric_limits<integer>::max)();
93 if( !
Input.ConsumeDec( exp ) )
94 error(
"Power of 2 symbol '^' is not followed by a number" );
101 if( !
Input.ConsumeInt( bigInt ) )
102 error(
"Not an integral value" );
128 || ( isLastField && ( result ==
OuterDelimChar || result ==
'\0' ) ) )
132 error(
"End of input when parsing a character." );
147 if( !
Input.ConsumeFloat( result ) )
148 error(
"Not a floating point value" );
174}
namespace alib::enumrecords::detail {
178 #if ALIB_MONOMEM && ALIB_CONTAINERS
HashMap< MonoAllocator, EnumRecordKey, const void *, EnumRecordKey::Hash, EnumRecordKey::EqualTo > & getInternalRecordMap()
@ Keep
Keep whitespaces in string.
@ Exclude
Chooses exclusion.
strings::TString< nchar > NString
Type alias in namespace #"%alib".
strings::TCString< nchar > NCString
Type alias in namespace #"%alib".
constexpr CString NEW_LINE
A zero-terminated string containing the new-line character sequence.
strings::TAString< nchar, lang::HeapAllocator > NAString
Type alias in namespace #"%alib".
lang::integer integer
Type alias in namespace #"%alib".
strings::TString< character > String
Type alias in namespace #"%alib".
strings::TSubstring< character > Substring
Type alias in namespace #"%alib".
constexpr CString DEFAULT_WHITESPACES
A zero-terminated string of default whitespace characters.
NLocalString< 256 > NString256
Type alias name for #"TLocalString;TLocalString<nchar,256>".
characters::character character
Type alias in namespace #"%alib".
static void assertEndOfRecord()
static NString ResourceCategory
The resource category (if a resourced string was parsed).
static void assertChar(character specificChar, const NCString &where)
static void error(const NCString &what)
static void Get(String &result, bool isLastField=false)
static void assertEndOfInput()
static character OuterDelimChar
The delimiter of records.
static Substring Input
The remaining input string.
static character InnerDelimChar
The delimiter of fields of a record.
static NString ResourceName
The resource name (if a resourced string was parsed).
static void assertNoTrailingWhitespaces(String &token)
static void assertNoUnnecessary(character specificChar, const NCString &where)
static String OriginalInput
A backup of the originally given string to parse.
static void assertNoWhitespaces(const NCString &where)
static integer getInteger(bool isLastField)