36 tok.type_ = tokenType::BOOL;
37 tok.data_.labelVal = on;
46 tok.type_ = tokenType::FLAG;
47 tok.data_.flagVal = bitmask;
59 case token::END_STATEMENT :
60 case token::BEGIN_LIST :
61 case token::END_LIST :
62 case token::BEGIN_SQR :
64 case token::BEGIN_BLOCK :
65 case token::END_BLOCK :
71 case token::MULTIPLY :
87 inline void Foam::token::setUndefined() noexcept
89 type_ = tokenType::UNDEFINED;
116 case tokenType::WORD:
117 case tokenType::DIRECTIVE:
119 data_.wordPtr =
new word(*tok.data_.wordPtr);
123 case tokenType::STRING:
124 case tokenType::VARIABLE:
125 case tokenType::VERBATIM:
127 data_.stringPtr =
new string(*tok.data_.stringPtr);
131 case tokenType::COMPOUND:
134 data_.compoundPtr = tok.data_.compoundPtr;
135 data_.compoundPtr->refCount::operator++();
159 type_(tokenType::PUNCTUATION),
162 data_.punctuationVal =
p;
169 type_(tokenType::LABEL),
172 data_.labelVal = val;
179 type_(tokenType::FLOAT),
182 data_.floatVal = val;
189 type_(tokenType::DOUBLE),
192 data_.doubleVal = val;
202 data_.wordPtr =
new word(w);
212 data_.stringPtr =
new string(str);
222 data_.wordPtr =
new word(std::move(w));
232 data_.stringPtr =
new string(std::move(str));
242 data_.compoundPtr = ptr;
260 case tokenType::WORD:
261 case tokenType::DIRECTIVE:
263 delete data_.wordPtr;
267 case tokenType::STRING:
268 case tokenType::VARIABLE:
269 case tokenType::VERBATIM:
271 delete data_.stringPtr;
275 case tokenType::COMPOUND:
277 if (data_.compoundPtr->unique())
279 delete data_.compoundPtr;
283 data_.compoundPtr->refCount::operator--();
303 std::swap(data_, tok.data_);
304 std::swap(type_, tok.type_);
305 std::swap(line_, tok.line_);
317 if (type_ == tokType)
325 case tokenType::BOOL:
326 case tokenType::LABEL:
330 case tokenType::BOOL:
331 case tokenType::LABEL:
342 case tokenType::WORD:
343 case tokenType::DIRECTIVE:
347 case tokenType::WORD:
348 case tokenType::DIRECTIVE:
359 case tokenType::STRING:
360 case tokenType::VARIABLE:
361 case tokenType::VERBATIM:
366 case tokenType::STRING:
367 case tokenType::VARIABLE:
368 case tokenType::VERBATIM:
401 return (type_ != tokenType::UNDEFINED && type_ != tokenType::ERROR);
407 return (type_ == tokenType::UNDEFINED);
413 return (type_ == tokenType::ERROR);
419 return (type_ == tokenType::BOOL);
425 if (type_ == tokenType::BOOL || type_ == tokenType::LABEL)
427 return data_.labelVal;
437 return (type_ == tokenType::FLAG);
443 if (type_ == tokenType::FLAG)
445 return data_.flagVal;
448 parseError(
"flag bitmask");
455 return (type_ == tokenType::PUNCTUATION);
461 if (type_ == tokenType::PUNCTUATION)
463 return data_.punctuationVal;
466 parseError(
"punctuation character");
467 return punctuationToken::NULL_TOKEN;
475 type_ == tokenType::PUNCTUATION
476 && isseparator(data_.punctuationVal)
483 return (type_ == tokenType::LABEL);
489 if (type_ == tokenType::LABEL)
491 return data_.labelVal;
501 return (type_ == tokenType::FLOAT);
507 if (type_ == tokenType::FLOAT)
509 return data_.floatVal;
519 return (type_ == tokenType::DOUBLE);
525 if (type_ == tokenType::DOUBLE)
527 return data_.doubleVal;
530 parseError(
"double");
539 type_ == tokenType::FLOAT
540 || type_ == tokenType::DOUBLE
547 if (type_ == tokenType::FLOAT)
549 return data_.floatVal;
551 else if (type_ == tokenType::DOUBLE)
553 return data_.doubleVal;
556 parseError(
"scalar");
563 return (type_ == tokenType::LABEL || isScalar());
575 return scalarToken();
578 parseError(
"number (label or scalar)");
587 type_ == tokenType::WORD
588 || type_ == tokenType::DIRECTIVE
595 return (type_ == tokenType::DIRECTIVE);
603 type_ == tokenType::WORD
604 || type_ == tokenType::DIRECTIVE
607 return *data_.wordPtr;
619 type_ == tokenType::STRING
620 || type_ == tokenType::VARIABLE
621 || type_ == tokenType::VERBATIM
628 return (type_ == tokenType::VARIABLE);
634 return (type_ == tokenType::VERBATIM);
640 return (isWord() || isString());
648 type_ == tokenType::STRING
649 || type_ == tokenType::VARIABLE
650 || type_ == tokenType::VERBATIM
653 return *data_.stringPtr;
657 type_ == tokenType::WORD
658 || type_ == tokenType::DIRECTIVE
662 return *data_.wordPtr;
665 parseError(
"string");
672 return (type_ == tokenType::COMPOUND);
678 if (type_ == tokenType::COMPOUND)
680 return *data_.compoundPtr;
683 parseError(
"compound");
684 return *data_.compoundPtr;
691 type_ = tokenType::ERROR;
715 case tokenType::WORD:
716 case tokenType::DIRECTIVE:
718 data_.wordPtr =
new word(*tok.data_.wordPtr);
722 case tokenType::STRING:
723 case tokenType::VARIABLE:
724 case tokenType::VERBATIM:
726 data_.stringPtr =
new string(*tok.data_.stringPtr);
730 case tokenType::COMPOUND:
733 data_.compoundPtr = tok.data_.compoundPtr;
734 data_.compoundPtr->refCount::operator++();
760 type_ = tokenType::PUNCTUATION;
761 data_.punctuationVal =
p;
768 type_ = tokenType::LABEL;
769 data_.labelVal = val;
776 type_ = tokenType::FLOAT;
777 data_.floatVal = val;
784 type_ = tokenType::DOUBLE;
785 data_.doubleVal = val;
792 type_ = tokenType::WORD;
793 data_.wordPtr =
new word(w);
800 type_ = tokenType::STRING;
801 data_.stringPtr =
new string(str);
808 type_ = tokenType::WORD;
809 data_.wordPtr =
new word(std::move(w));
816 type_ = tokenType::STRING;
817 data_.stringPtr =
new string(std::move(
s));
824 type_ = tokenType::COMPOUND;
825 data_.compoundPtr = ptr;
832 type_ = tokenType::COMPOUND;
833 data_.compoundPtr = ptr.release();
839 if (type_ != tok.type_)
846 case tokenType::UNDEFINED:
849 case tokenType::BOOL:
850 return data_.labelVal == tok.data_.labelVal;
852 case tokenType::FLAG:
853 return data_.flagVal == tok.data_.flagVal;
855 case tokenType::PUNCTUATION:
856 return data_.punctuationVal == tok.data_.punctuationVal;
858 case tokenType::LABEL:
859 return data_.labelVal == tok.data_.labelVal;
861 case tokenType::FLOAT:
862 return equal(data_.floatVal, tok.data_.floatVal);
864 case tokenType::DOUBLE:
865 return equal(data_.doubleVal, tok.data_.doubleVal);
867 case tokenType::WORD:
868 case tokenType::DIRECTIVE:
869 return *data_.wordPtr == *tok.data_.wordPtr;
871 case tokenType::STRING:
872 case tokenType::VARIABLE:
873 case tokenType::VERBATIM:
874 return *data_.stringPtr == *tok.data_.stringPtr;
876 case tokenType::COMPOUND:
877 return data_.compoundPtr == tok.data_.compoundPtr;
879 case tokenType::ERROR:
889 return (type_ == tokenType::PUNCTUATION && data_.punctuationVal ==
p);
898 ?
s == *data_.wordPtr
899 : isString() &&
s == *data_.stringPtr
908 type_ == tokenType::LABEL
909 && data_.labelVal == val
918 type_ == tokenType::FLOAT
919 &&
equal(data_.floatVal, val)
928 type_ == tokenType::DOUBLE
929 &&
equal(data_.doubleVal, val)