36 tok.type_ = tokenType::BOOL;
37 tok.data_.labelVal = on;
46 tok.type_ = tokenType::FLAG;
47 tok.data_.flagVal = bitmask;
87 inline void Foam::token::setUndefined()
89 type_ = tokenType::UNDEFINED;
109 lineNumber_(tok.lineNumber_)
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++();
149 lineNumber_(tok.lineNumber_)
160 lineNumber_(lineNumber)
162 data_.punctuationVal =
p;
170 lineNumber_(lineNumber)
172 data_.labelVal = val;
180 lineNumber_(lineNumber)
182 data_.floatVal = val;
190 lineNumber_(lineNumber)
192 data_.doubleVal = val;
200 lineNumber_(lineNumber)
202 data_.wordPtr =
new word(w);
210 lineNumber_(lineNumber)
212 data_.stringPtr =
new string(str);
220 lineNumber_(lineNumber)
222 data_.wordPtr =
new word(std::move(w));
230 lineNumber_(lineNumber)
232 data_.stringPtr =
new string(std::move(str));
250 case tokenType::WORD:
251 case tokenType::DIRECTIVE:
253 delete data_.wordPtr;
257 case tokenType::STRING:
258 case tokenType::VARIABLE:
259 case tokenType::VERBATIM:
261 delete data_.stringPtr;
265 case tokenType::COMPOUND:
267 if (data_.compoundPtr->unique())
269 delete data_.compoundPtr;
273 data_.compoundPtr->refCount::operator--();
293 std::swap(data_, tok.data_);
294 std::swap(type_, tok.type_);
295 std::swap(lineNumber_, tok.lineNumber_);
307 if (type_ == tokType)
315 case tokenType::BOOL:
316 case tokenType::LABEL:
320 case tokenType::BOOL:
321 case tokenType::LABEL:
332 case tokenType::WORD:
333 case tokenType::DIRECTIVE:
337 case tokenType::WORD:
338 case tokenType::DIRECTIVE:
349 case tokenType::STRING:
350 case tokenType::VARIABLE:
351 case tokenType::VERBATIM:
356 case tokenType::STRING:
357 case tokenType::VARIABLE:
358 case tokenType::VERBATIM:
391 return (type_ != tokenType::UNDEFINED && type_ != tokenType::ERROR);
397 return (type_ == tokenType::UNDEFINED);
403 return (type_ == tokenType::ERROR);
409 return (type_ == tokenType::BOOL);
415 if (type_ == tokenType::BOOL || type_ == tokenType::LABEL)
417 return data_.labelVal;
427 return (type_ == tokenType::FLAG);
433 if (type_ == tokenType::FLAG)
435 return data_.flagVal;
438 parseError(
"flag bitmask");
445 return (type_ == tokenType::PUNCTUATION);
451 if (type_ == tokenType::PUNCTUATION)
453 return data_.punctuationVal;
456 parseError(
"punctuation character");
457 return punctuationToken::NULL_TOKEN;
465 type_ == tokenType::PUNCTUATION
466 && isseparator(data_.punctuationVal)
473 return (type_ == tokenType::LABEL);
479 if (type_ == tokenType::LABEL)
481 return data_.labelVal;
491 return (type_ == tokenType::FLOAT);
497 if (type_ == tokenType::FLOAT)
499 return data_.floatVal;
509 return (type_ == tokenType::DOUBLE);
515 if (type_ == tokenType::DOUBLE)
517 return data_.doubleVal;
520 parseError(
"double");
529 type_ == tokenType::FLOAT
530 || type_ == tokenType::DOUBLE
537 if (type_ == tokenType::FLOAT)
539 return data_.floatVal;
541 else if (type_ == tokenType::DOUBLE)
543 return data_.doubleVal;
546 parseError(
"scalar");
553 return (type_ == tokenType::LABEL || isScalar());
565 return scalarToken();
568 parseError(
"number (label or scalar)");
577 type_ == tokenType::WORD
578 || type_ == tokenType::DIRECTIVE
585 return (type_ == tokenType::DIRECTIVE);
593 type_ == tokenType::WORD
594 || type_ == tokenType::DIRECTIVE
597 return *data_.wordPtr;
609 type_ == tokenType::STRING
610 || type_ == tokenType::VARIABLE
611 || type_ == tokenType::VERBATIM
618 return (type_ == tokenType::VARIABLE);
624 return (type_ == tokenType::VERBATIM);
630 return (isWord() || isString());
638 type_ == tokenType::STRING
639 || type_ == tokenType::VARIABLE
640 || type_ == tokenType::VERBATIM
643 return *data_.stringPtr;
647 type_ == tokenType::WORD
648 || type_ == tokenType::DIRECTIVE
652 return *data_.wordPtr;
655 parseError(
"string");
662 return (type_ == tokenType::COMPOUND);
668 if (type_ == tokenType::COMPOUND)
670 return *data_.compoundPtr;
673 parseError(
"compound");
674 return *data_.compoundPtr;
681 type_ = tokenType::ERROR;
698 lineNumber_ = tok.lineNumber_;
705 case tokenType::WORD:
706 case tokenType::DIRECTIVE:
708 data_.wordPtr =
new word(*tok.data_.wordPtr);
712 case tokenType::STRING:
713 case tokenType::VARIABLE:
714 case tokenType::VERBATIM:
716 data_.stringPtr =
new string(*tok.data_.stringPtr);
720 case tokenType::COMPOUND:
723 data_.compoundPtr = tok.data_.compoundPtr;
724 data_.compoundPtr->refCount::operator++();
750 type_ = tokenType::PUNCTUATION;
751 data_.punctuationVal =
p;
758 type_ = tokenType::LABEL;
759 data_.labelVal = val;
766 type_ = tokenType::FLOAT;
767 data_.floatVal = val;
774 type_ = tokenType::DOUBLE;
775 data_.doubleVal = val;
782 type_ = tokenType::WORD;
783 data_.wordPtr =
new word(w);
790 type_ = tokenType::STRING;
791 data_.stringPtr =
new string(str);
798 type_ = tokenType::WORD;
799 data_.wordPtr =
new word(std::move(w));
806 type_ = tokenType::STRING;
807 data_.stringPtr =
new string(std::move(
s));
814 type_ = tokenType::COMPOUND;
815 data_.compoundPtr = compoundPtr;
821 if (type_ != tok.type_)
828 case tokenType::UNDEFINED:
831 case tokenType::BOOL:
832 return data_.labelVal == tok.data_.labelVal;
834 case tokenType::FLAG:
835 return data_.flagVal == tok.data_.flagVal;
837 case tokenType::PUNCTUATION:
838 return data_.punctuationVal == tok.data_.punctuationVal;
840 case tokenType::LABEL:
841 return data_.labelVal == tok.data_.labelVal;
843 case tokenType::FLOAT:
844 return equal(data_.floatVal, tok.data_.floatVal);
846 case tokenType::DOUBLE:
847 return equal(data_.doubleVal, tok.data_.doubleVal);
849 case tokenType::WORD:
850 case tokenType::DIRECTIVE:
851 return *data_.wordPtr == *tok.data_.wordPtr;
853 case tokenType::STRING:
854 case tokenType::VARIABLE:
855 case tokenType::VERBATIM:
856 return *data_.stringPtr == *tok.data_.stringPtr;
858 case tokenType::COMPOUND:
859 return data_.compoundPtr == tok.data_.compoundPtr;
861 case tokenType::ERROR:
871 return (type_ == tokenType::PUNCTUATION && data_.punctuationVal ==
p);
880 ?
s == *data_.wordPtr
881 : isString() &&
s == *data_.stringPtr
890 type_ == tokenType::LABEL
891 && data_.labelVal == val
900 type_ == tokenType::FLOAT
901 &&
equal(data_.floatVal, val)
910 type_ == tokenType::DOUBLE
911 &&
equal(data_.doubleVal, val)