STORMM Source Documentation
Loading...
Searching...
No Matches
parse.h
1// -*-c++-*-
2#ifndef STORMM_PARSE_H
3#define STORMM_PARSE_H
4
5#include <vector>
6#include <string>
7#include "copyright.h"
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"
13#include "textfile.h"
14#include "textguard.h"
15
16namespace stormm {
17namespace parse {
18
19using constants::ExceptionResponse;
20using constants::CaseSensitivity;
21using data_types::isSignedIntegralScalarType;
22using data_types::isUnsignedIntegralScalarType;
23using data_types::isFloatingPointScalarType;
24
27constexpr int free_number_format = -32788;
28
35std::string operator+(const std::string &lhs, const char4 rhs);
36
48std::string char2ToString(const char2 value);
49std::string char3ToString(const char3 value);
50std::string char4ToString(const char4 value);
52
57char4 stringToChar4(const std::string &value);
58
69std::vector<char4> stringToChar4Vector(const std::string &value, char blank = '\0');
70
74std::string alphabetNumber(ullint input);
75
80std::string rgbHexCode(const uchar4 color_in);
81
90bool verifyNumberFormat(const char* a, NumberFormat cform, int read_begin = 0, int len = 0);
91
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);
120
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);
144
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);
168
180bool strcmpCased(const char* sa, const char* sb,
181 const CaseSensitivity csen = CaseSensitivity::YES);
182
183bool strcmpCased(const std::string &sa, const char* sb,
184 const CaseSensitivity csen = CaseSensitivity::YES);
185
186bool strcmpCased(const char* sa, const std::string &sb,
187 const CaseSensitivity csen = CaseSensitivity::YES);
188
189bool strcmpCased(const std::string &sa, const std::string &sb,
190 const CaseSensitivity csen = CaseSensitivity::YES);
192
206bool strncmpCased(const char* sa, const char* sb, int length,
207 CaseSensitivity csen = CaseSensitivity::YES);
208
209bool strncmpCased(const std::string &sa, const char* sb,
210 CaseSensitivity csen = CaseSensitivity::YES, int length = -1);
211
212bool strncmpCased(const char* sa, const std::string &sb,
213 CaseSensitivity csen = CaseSensitivity::YES, int length = -1);
214
215bool strncmpCased(const std::string &sa, const std::string &sb,
216 CaseSensitivity csen = CaseSensitivity::YES, int length = -1);
218
225bool strcmpWildCard(const std::string &target, const std::string &query,
226 const std::vector<WildCardKind> &wildcards);
227
233int realDecimalPlaces(double value, int limit = 10);
234
245std::string addLeadingWhiteSpace(const std::string &input, const size_t target_length);
246void addLeadingWhiteSpace(std::string *input, const size_t target_length);
248
259std::string addTailingWhiteSpace(const std::string &input, const size_t target_length);
260void addTailingWhiteSpace(std::string *input, const size_t target_length);
262
271std::string removeLeadingWhiteSpace(const std::string &input);
272void removeLeadingWhiteSpace(std::string *input);
274
283std::string removeTailingWhiteSpace(const std::string &input);
284void removeTailingWhiteSpace(std::string *input);
286
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);
311
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);
315
320size_t maximumLineLength(const std::string &input);
321
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);
341
342std::string realToString(const double value, const int format_a, const NumberFormat method,
343 const NumberPrintStyle style = NumberPrintStyle::STANDARD);
345
354std::string minimalRealFormat(double value, double rel, bool enforce_decimal = false);
355
369template <typename T>
370int findAlignmentWidth(const T* numbers, size_t count, int decimal_places, size_t advance = 1);
371
372template <typename T>
373int findAlignmentWidth(const std::vector<T> &numbers, int decimal_places, size_t advance = 1);
375
381std::string intToString(llint value, int width = free_number_format,
382 NumberPrintStyle = NumberPrintStyle::STANDARD);
383
386const std::vector<TextGuard> operator+(const std::vector<TextGuard> &lhs,
387 const std::vector<TextGuard> &rhs);
388
403bool detectGuard(const TextFileReader &tfr, const int line_idx, const int pos_idx,
404 const std::string &guard_seq);
405
406bool detectGuard(const char* line, const int pos_idx, const std::string &guard_seq);
407
408bool detectGuard(const char* line, size_t pos_idx, size_t line_limit,
409 const std::string &guard_seq);
411
420int applyGuard(const char* line, const size_t pos_idx, const size_t line_limit,
421 const std::vector<TextGuard> &markers);
422
423int applyGuard(const TextFileReader &tfr, const int line_idx, const int pos_idx,
424 const std::vector<TextGuard> &markers);
426
440std::vector<bool> markEscapedCharacters(const char* textstr, size_t n_char,
441 const std::vector<TextGuard> &escapes);
442
443std::vector<bool> markEscapedCharacters(const std::string &textstr,
444 const std::vector<TextGuard> &escapes);
445
446std::vector<bool> markEscapedCharacters(const TextFileReader &tfr,
447 const std::vector<TextGuard> &escapes);
449
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("\\") });
468
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("\\") });
473
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("\\") });
478
479std::vector<bool> markGuardedText(const TextFileReader &tfr,
480 const std::vector<TextGuard> &markers,
481 const std::vector<TextGuard> &alternatives,
482 const std::vector<TextGuard> &escapes = { TextGuard("\\") });
484
499std::vector<int> resolveScopes(const char* input_text, int length,
500 const std::vector<TextGuard> scope_guards,
501 ExceptionResponse policy = ExceptionResponse::DIE);
502
503std::vector<int> resolveScopes(const std::string &input_text,
504 const std::vector<TextGuard> scope_guards,
505 ExceptionResponse policy = ExceptionResponse::DIE);
507
527int countDelimiters(const char* text, size_t start_pos, size_t length, const char* delimiters,
528 int ndelim, const std::vector<bool> &quote_mask = {},
529 const std::vector<bool> &comment_mask = {});
530
531int countDelimiters(const std::string &text, const std::vector<char> &delimiters,
532 const std::vector<bool> &quote_mask = {},
533 const std::vector<bool> &comment_mask = {});
535
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);
553
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> &quote_mask = {},
587 const std::vector<bool> &comment_mask = {},
588 std::vector<bool> *output_quoted = nullptr,
589 std::vector<bool> *output_commented = nullptr);
590
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> &quote_mask = {},
594 const std::vector<bool> &comment_mask = {},
595 std::vector<bool> *output_quoted = nullptr,
596 std::vector<bool> *output_commented = nullptr);
597
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> &quote_mask = {},
601 const std::vector<bool> &comment_mask = {},
602 std::vector<bool> *output_quoted = nullptr,
603 std::vector<bool> *output_commented = nullptr);
604
605std::string digestText(const std::string &text, const std::vector<char> &separators,
606 const std::vector<char> &delimiters,
607 const std::vector<bool> &quote_mask = {},
608 const std::vector<bool> &comment_mask = {},
609 std::vector<bool> *output_quoted = nullptr,
610 std::vector<bool> *output_commented = nullptr);
612
638std::vector<std::string>
639separateText(const char* text, int n_char, const std::vector<bool> &comment_mask = {},
640 const std::vector<bool> &quotation_mask = {},
641 const std::vector<TextGuard> &quote_marks = { TextGuard("\"", "\""),
642 TextGuard("'", "'") },
643 const std::vector<std::string> &delimiters = {},
644 const std::vector<TextGuard> &escapes = { TextGuard("\\") });
645
646std::vector<std::string>
647separateText(const std::string &text, const std::vector<bool> &comment_mask = {},
648 const std::vector<bool> &quotation_mask = {},
649 const std::vector<TextGuard> &quote_marks = { TextGuard("\"", "\""),
650 TextGuard("'", "'") },
651 const std::vector<std::string> &delimiters = {},
652 const std::vector<TextGuard> &escapes = { TextGuard("\\") });
653
654std::vector<std::string>
655separateText(const std::string &text, const std::vector<std::string> &delimiters,
656 const std::vector<TextGuard> &escapes = { TextGuard("\\") });
657
658std::vector<std::string>
659separateText(const TextFile &text, const std::vector<bool> &comment_mask = {},
660 const std::vector<bool> &quotation_mask = {},
661 const std::vector<TextGuard> &quote_marks = { TextGuard("\"", "\""),
662 TextGuard("'", "'") },
663 const std::vector<std::string> &delimiters = {},
664 const std::vector<TextGuard> &escapes = { TextGuard("\\") });
666
672int findStringInVector(const std::vector<std::string> &vec, const std::string &query);
673
679std::vector<int> vectorStrtol(const std::vector<std::string> &sv,
680 ExceptionResponse policy = ExceptionResponse::DIE);
681
687std::vector<double> vectorStrtod(const std::vector<std::string> &sv,
688 ExceptionResponse policy = ExceptionResponse::DIE);
689
703std::vector<std::string> vectorOfStrings(const char* v[], int n);
704
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);
708
709} // namespace parse
710} // namespace stormm
711
712#include "parse.tpp"
713
714#endif
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