8#include "Constants/behavior.h"
9#include "DataTypes/common_types.h"
10#include "DataTypes/stormm_vector_types.h"
11#include "parsing_enumerators.h"
12#include "polynumeric.h"
19using constants::ExceptionResponse;
20using constants::CaseSensitivity;
21using data_types::isSignedIntegralScalarType;
22using data_types::isUnsignedIntegralScalarType;
23using data_types::isFloatingPointScalarType;
27constexpr int free_number_format = -32788;
35std::string operator+(
const std::string &lhs,
const char4 rhs);
48std::string char2ToString(
const char2 value);
49std::string char3ToString(
const char3 value);
50std::string char4ToString(
const char4 value);
57char4 stringToChar4(
const std::string &value);
69std::vector<char4> stringToChar4Vector(
const std::string &value,
char blank =
'\0');
74std::string alphabetNumber(ullint input);
80std::string rgbHexCode(
const uchar4 color_in);
90bool verifyNumberFormat(
const char* a, NumberFormat cform,
int read_begin = 0,
int len = 0);
110bool verifyContents(
const char* line,
int start_pos,
int length,
111 NumberFormat fmt = NumberFormat::CHAR4);
112bool verifyContents(
const std::string &line, NumberFormat fmt);
113bool verifyContents(
const std::string &line,
int start_pos,
int length,
114 NumberFormat fmt = NumberFormat::CHAR4);
115bool verifyContents(
const TextFile &tf,
int line,
int start_pos,
int length,
116 NumberFormat fmt = NumberFormat::CHAR4);
117bool verifyContents(
const TextFileReader &tfr,
int line,
int start_pos,
int length,
118 NumberFormat fmt = NumberFormat::CHAR4);
136char uppercase(
char tc);
137char2 uppercase(
const char2 tc);
138char3 uppercase(
const char3 tc);
139char4 uppercase(
const char4 tc);
140std::string uppercase(
const std::string &ts);
141void uppercase(
char* tcs,
size_t n_char = 0);
142std::string uppercase(
const char* tcs);
160char lowercase(
char tc);
161char2 lowercase(
const char2 tc);
162char3 lowercase(
const char3 tc);
163char4 lowercase(
const char4 tc);
164std::string lowercase(
const std::string &ts);
165void lowercase(
char* tcs,
size_t n_char = 0);
166std::string lowercase(
const char* tcs);
180bool strcmpCased(
const char* sa,
const char* sb,
181 const CaseSensitivity csen = CaseSensitivity::YES);
183bool strcmpCased(
const std::string &sa,
const char* sb,
184 const CaseSensitivity csen = CaseSensitivity::YES);
186bool strcmpCased(
const char* sa,
const std::string &sb,
187 const CaseSensitivity csen = CaseSensitivity::YES);
189bool strcmpCased(
const std::string &sa,
const std::string &sb,
190 const CaseSensitivity csen = CaseSensitivity::YES);
206bool strncmpCased(
const char* sa,
const char* sb,
int length,
207 CaseSensitivity csen = CaseSensitivity::YES);
209bool strncmpCased(
const std::string &sa,
const char* sb,
210 CaseSensitivity csen = CaseSensitivity::YES,
int length = -1);
212bool strncmpCased(
const char* sa,
const std::string &sb,
213 CaseSensitivity csen = CaseSensitivity::YES,
int length = -1);
215bool strncmpCased(
const std::string &sa,
const std::string &sb,
216 CaseSensitivity csen = CaseSensitivity::YES,
int length = -1);
225bool strcmpWildCard(
const std::string &target,
const std::string &query,
226 const std::vector<WildCardKind> &wildcards);
233int realDecimalPlaces(
double value,
int limit = 10);
245std::string addLeadingWhiteSpace(
const std::string &input,
const size_t target_length);
246void addLeadingWhiteSpace(std::string *input,
const size_t target_length);
259std::string addTailingWhiteSpace(
const std::string &input,
const size_t target_length);
260void addTailingWhiteSpace(std::string *input,
const size_t target_length);
271std::string removeLeadingWhiteSpace(
const std::string &input);
272void removeLeadingWhiteSpace(std::string *input);
283std::string removeTailingWhiteSpace(
const std::string &input);
284void removeTailingWhiteSpace(std::string *input);
308size_t justifyStrings(std::vector<std::string> *ds,
int lower_limit,
int upper_limit,
309 JustifyText fside = JustifyText::LEFT,
size_t max_length = 10,
310 int long_count = 2,
int near_limit = 4);
312size_t justifyStrings(std::vector<std::string> *ds, JustifyText fside = JustifyText::LEFT,
313 size_t max_length = 10,
int long_count = 2,
int near_limit = 4);
320size_t maximumLineLength(
const std::string &input);
337std::string realToString(
double value,
int format_a = free_number_format,
338 int format_b = free_number_format,
339 NumberFormat method = NumberFormat::STANDARD_REAL,
340 NumberPrintStyle = NumberPrintStyle::STANDARD);
342std::string realToString(
const double value,
const int format_a,
const NumberFormat method,
343 const NumberPrintStyle style = NumberPrintStyle::STANDARD);
354std::string minimalRealFormat(
double value,
double rel,
bool enforce_decimal =
false);
370int findAlignmentWidth(
const T* numbers,
size_t count,
int decimal_places,
size_t advance = 1);
373int findAlignmentWidth(
const std::vector<T> &numbers,
int decimal_places,
size_t advance = 1);
381std::string intToString(llint value,
int width = free_number_format,
382 NumberPrintStyle = NumberPrintStyle::STANDARD);
386const std::vector<TextGuard> operator+(
const std::vector<TextGuard> &lhs,
387 const std::vector<TextGuard> &rhs);
403bool detectGuard(
const TextFileReader &tfr,
const int line_idx,
const int pos_idx,
404 const std::string &guard_seq);
406bool detectGuard(
const char* line,
const int pos_idx,
const std::string &guard_seq);
408bool detectGuard(
const char* line,
size_t pos_idx,
size_t line_limit,
409 const std::string &guard_seq);
420int applyGuard(
const char* line,
const size_t pos_idx,
const size_t line_limit,
421 const std::vector<TextGuard> &markers);
423int applyGuard(
const TextFileReader &tfr,
const int line_idx,
const int pos_idx,
424 const std::vector<TextGuard> &markers);
440std::vector<bool> markEscapedCharacters(
const char* textstr,
size_t n_char,
441 const std::vector<TextGuard> &escapes);
443std::vector<bool> markEscapedCharacters(
const std::string &textstr,
444 const std::vector<TextGuard> &escapes);
447 const std::vector<TextGuard> &escapes);
464std::vector<bool> markGuardedText(
const char* textstr,
size_t n_char,
const size_t* line_limits,
465 int line_count,
const std::vector<TextGuard> &markers,
466 const std::vector<TextGuard> &alternatives,
467 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
469std::vector<bool> markGuardedText(
const char* textstr,
const size_t n_char,
470 const std::vector<TextGuard> &markers,
471 const std::vector<TextGuard> &alternatives,
472 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
474std::vector<bool> markGuardedText(
const std::string &str,
475 const std::vector<TextGuard> &markers,
476 const std::vector<TextGuard> &alternatives,
477 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
480 const std::vector<TextGuard> &markers,
481 const std::vector<TextGuard> &alternatives,
482 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
499std::vector<int> resolveScopes(
const char* input_text,
int length,
500 const std::vector<TextGuard> scope_guards,
501 ExceptionResponse policy = ExceptionResponse::DIE);
503std::vector<int> resolveScopes(
const std::string &input_text,
504 const std::vector<TextGuard> scope_guards,
505 ExceptionResponse policy = ExceptionResponse::DIE);
527int countDelimiters(
const char* text,
size_t start_pos,
size_t length,
const char* delimiters,
528 int ndelim,
const std::vector<bool> "e_mask = {},
529 const std::vector<bool> &comment_mask = {});
531int countDelimiters(
const std::string &text,
const std::vector<char> &delimiters,
532 const std::vector<bool> "e_mask = {},
533 const std::vector<bool> &comment_mask = {});
549int countWords(
const char* line,
const int start_pos,
const int length);
550int countWords(
const std::string &line,
const int start_pos,
const int length);
551int countWords(
const TextFile &tf,
const int line,
const int start_pos,
const int length);
584void digestText(
const char* text,
size_t start_pos,
size_t length,
const char* separators,
585 int n_separators,
const char* delimiters,
int n_delimiters,
char* output,
586 const std::vector<bool> "e_mask = {},
587 const std::vector<bool> &comment_mask = {},
588 std::vector<bool> *output_quoted =
nullptr,
589 std::vector<bool> *output_commented =
nullptr);
591std::string digestText(
const char* text,
size_t start_pos,
size_t length,
const char* separators,
592 int n_separators,
const char* delimiters,
int n_delimiters,
593 const std::vector<bool> "e_mask = {},
594 const std::vector<bool> &comment_mask = {},
595 std::vector<bool> *output_quoted =
nullptr,
596 std::vector<bool> *output_commented =
nullptr);
598void digestText(
const std::string &text,
const std::vector<char> &separators,
599 const std::vector<char> &delimiters, std::string *output,
600 const std::vector<bool> "e_mask = {},
601 const std::vector<bool> &comment_mask = {},
602 std::vector<bool> *output_quoted =
nullptr,
603 std::vector<bool> *output_commented =
nullptr);
605std::string digestText(
const std::string &text,
const std::vector<char> &separators,
606 const std::vector<char> &delimiters,
607 const std::vector<bool> "e_mask = {},
608 const std::vector<bool> &comment_mask = {},
609 std::vector<bool> *output_quoted =
nullptr,
610 std::vector<bool> *output_commented =
nullptr);
638std::vector<std::string>
639separateText(
const char* text,
int n_char,
const std::vector<bool> &comment_mask = {},
640 const std::vector<bool> "ation_mask = {},
641 const std::vector<TextGuard> "e_marks = {
TextGuard(
"\"",
"\""),
643 const std::vector<std::string> &delimiters = {},
644 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
646std::vector<std::string>
647separateText(
const std::string &text,
const std::vector<bool> &comment_mask = {},
648 const std::vector<bool> "ation_mask = {},
649 const std::vector<TextGuard> "e_marks = {
TextGuard(
"\"",
"\""),
651 const std::vector<std::string> &delimiters = {},
652 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
654std::vector<std::string>
655separateText(
const std::string &text,
const std::vector<std::string> &delimiters,
656 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
658std::vector<std::string>
659separateText(
const TextFile &text,
const std::vector<bool> &comment_mask = {},
660 const std::vector<bool> "ation_mask = {},
661 const std::vector<TextGuard> "e_marks = {
TextGuard(
"\"",
"\""),
663 const std::vector<std::string> &delimiters = {},
664 const std::vector<TextGuard> &escapes = {
TextGuard(
"\\") });
672int findStringInVector(
const std::vector<std::string> &vec,
const std::string &query);
679std::vector<int> vectorStrtol(
const std::vector<std::string> &sv,
680 ExceptionResponse policy = ExceptionResponse::DIE);
687std::vector<double> vectorStrtod(
const std::vector<std::string> &sv,
688 ExceptionResponse policy = ExceptionResponse::DIE);
703std::vector<std::string> vectorOfStrings(
const char* v[],
int n);
705std::vector<std::string> vectorOfStrings(
const char* s_a,
const char* s_b =
nullptr,
706 const char* s_c =
nullptr,
const char* s_d =
nullptr);
Structure for translating a text file into a compact, rapidly parsable vector of characters in CPU RA...
Definition textfile.h:45
Structure for specifying the features of a comment in some text file.
Definition textguard.h:18
Abstract for the TextFile object, providing read-only access.
Definition textfile.h:20