36 tok.type_ = tokenType::BOOL;
37 tok.data_.labelVal = on;
46 tok.type_ = tokenType::FLAG;
47 tok.data_.flagVal = bitmask;
85 inline void Foam::token::setUndefined()
87 type_ = tokenType::UNDEFINED;
107 lineNumber_(tok.lineNumber_)
114 case tokenType::WORD:
116 data_.wordPtr =
new word(*tok.data_.wordPtr);
120 case tokenType::STRING:
121 case tokenType::VARIABLE:
122 case tokenType::VERBATIMSTRING:
124 data_.stringPtr =
new string(*tok.data_.stringPtr);
128 case tokenType::COMPOUND:
131 data_.compoundPtr = tok.data_.compoundPtr;
132 data_.compoundPtr->refCount::operator++();
146 lineNumber_(tok.lineNumber_)
157 lineNumber_(lineNumber)
159 data_.punctuationVal =
p;
167 lineNumber_(lineNumber)
169 data_.labelVal =
val;
177 lineNumber_(lineNumber)
179 data_.floatVal =
val;
187 lineNumber_(lineNumber)
189 data_.doubleVal =
val;
197 lineNumber_(lineNumber)
199 data_.wordPtr =
new word(w);
207 lineNumber_(lineNumber)
209 data_.stringPtr =
new string(str);
217 lineNumber_(lineNumber)
219 data_.wordPtr =
new word(std::move(w));
227 lineNumber_(lineNumber)
229 data_.stringPtr =
new string(std::move(str));
247 case tokenType::WORD:
249 delete data_.wordPtr;
253 case tokenType::STRING:
254 case tokenType::VARIABLE:
255 case tokenType::VERBATIMSTRING:
257 delete data_.stringPtr;
261 case tokenType::COMPOUND:
263 if (data_.compoundPtr->unique())
265 delete data_.compoundPtr;
269 data_.compoundPtr->refCount::operator--();
289 std::swap(data_, tok.data_);
290 std::swap(type_, tok.type_);
291 std::swap(lineNumber_, tok.lineNumber_);
303 if (type_ == variant)
311 case tokenType::BOOL:
312 case tokenType::LABEL:
316 case tokenType::BOOL:
317 case tokenType::LABEL:
328 case tokenType::STRING:
329 case tokenType::VARIABLE:
330 case tokenType::VERBATIMSTRING:
335 case tokenType::STRING:
336 case tokenType::VARIABLE:
337 case tokenType::VERBATIMSTRING:
370 return (type_ != tokenType::UNDEFINED && type_ != tokenType::ERROR);
376 return (type_ == tokenType::UNDEFINED);
382 return (type_ == tokenType::ERROR);
388 return (type_ == tokenType::BOOL);
394 if (type_ == tokenType::BOOL || type_ == tokenType::LABEL)
396 return data_.labelVal;
406 return (type_ == tokenType::FLAG);
412 if (type_ == tokenType::FLAG)
414 return data_.flagVal;
417 parseError(
"flag bitmask");
424 return (type_ == tokenType::PUNCTUATION);
430 if (type_ == tokenType::PUNCTUATION)
432 return data_.punctuationVal;
435 parseError(
"punctuation character");
436 return punctuationToken::NULL_TOKEN;
444 type_ == tokenType::PUNCTUATION
445 && isseparator(data_.punctuationVal)
452 return (type_ == tokenType::LABEL);
458 if (type_ == tokenType::LABEL)
460 return data_.labelVal;
470 return (type_ == tokenType::FLOAT_SCALAR);
476 if (type_ == tokenType::FLOAT_SCALAR)
478 return data_.floatVal;
488 return (type_ == tokenType::DOUBLE_SCALAR);
494 if (type_ == tokenType::DOUBLE_SCALAR)
496 return data_.doubleVal;
499 parseError(
"double");
508 type_ == tokenType::FLOAT_SCALAR
509 || type_ == tokenType::DOUBLE_SCALAR
516 if (type_ == tokenType::FLOAT_SCALAR)
518 return data_.floatVal;
520 else if (type_ == tokenType::DOUBLE_SCALAR)
522 return data_.doubleVal;
525 parseError(
"scalar");
532 return (type_ == tokenType::LABEL || isScalar());
544 return scalarToken();
547 parseError(
"number (label or scalar)");
554 return (type_ == tokenType::WORD);
560 if (type_ == tokenType::WORD)
562 return *data_.wordPtr;
574 type_ == tokenType::STRING
575 || type_ == tokenType::VARIABLE
576 || type_ == tokenType::VERBATIMSTRING
583 return (type_ == tokenType::VARIABLE);
589 return (type_ == tokenType::VERBATIMSTRING);
595 return (isWord() || isString());
603 type_ == tokenType::STRING
604 || type_ == tokenType::VARIABLE
605 || type_ == tokenType::VERBATIMSTRING
608 return *data_.stringPtr;
610 else if (type_ == tokenType::WORD)
613 return static_cast<const string&
>(*data_.wordPtr);
616 parseError(
"string");
623 return (type_ == tokenType::COMPOUND);
629 if (type_ == tokenType::COMPOUND)
631 return *data_.compoundPtr;
634 parseError(
"compound");
635 return *data_.compoundPtr;
642 type_ = tokenType::ERROR;
659 lineNumber_ = tok.lineNumber_;
666 case tokenType::WORD:
668 data_.wordPtr =
new word(*tok.data_.wordPtr);
672 case tokenType::STRING:
673 case tokenType::VARIABLE:
674 case tokenType::VERBATIMSTRING:
676 data_.stringPtr =
new string(*tok.data_.stringPtr);
680 case tokenType::COMPOUND:
683 data_.compoundPtr = tok.data_.compoundPtr;
684 data_.compoundPtr->refCount::operator++();
710 type_ = tokenType::PUNCTUATION;
711 data_.punctuationVal =
p;
718 type_ = tokenType::LABEL;
719 data_.labelVal =
val;
726 type_ = tokenType::FLOAT_SCALAR;
727 data_.floatVal =
val;
734 type_ = tokenType::DOUBLE_SCALAR;
735 data_.doubleVal =
val;
742 type_ = tokenType::WORD;
743 data_.wordPtr =
new word(w);
750 type_ = tokenType::STRING;
751 data_.stringPtr =
new string(str);
758 type_ = tokenType::WORD;
759 data_.wordPtr =
new word(std::move(w));
766 type_ = tokenType::STRING;
767 data_.stringPtr =
new string(std::move(
s));
774 type_ = tokenType::COMPOUND;
775 data_.compoundPtr = compoundPtr;
781 if (type_ != tok.type_)
788 case tokenType::UNDEFINED:
791 case tokenType::BOOL:
792 return data_.labelVal == tok.data_.labelVal;
794 case tokenType::FLAG:
795 return data_.flagVal == tok.data_.flagVal;
797 case tokenType::PUNCTUATION:
798 return data_.punctuationVal == tok.data_.punctuationVal;
800 case tokenType::LABEL:
801 return data_.labelVal == tok.data_.labelVal;
803 case tokenType::FLOAT_SCALAR:
804 return equal(data_.floatVal, tok.data_.floatVal);
806 case tokenType::DOUBLE_SCALAR:
807 return equal(data_.doubleVal, tok.data_.doubleVal);
809 case tokenType::WORD:
810 return *data_.wordPtr == *tok.data_.wordPtr;
812 case tokenType::STRING:
813 case tokenType::VARIABLE:
814 case tokenType::VERBATIMSTRING:
815 return *data_.stringPtr == *tok.data_.stringPtr;
817 case tokenType::COMPOUND:
818 return data_.compoundPtr == tok.data_.compoundPtr;
820 case tokenType::ERROR:
830 return (type_ == tokenType::PUNCTUATION && data_.punctuationVal ==
p);
838 type_ == tokenType::WORD
839 ?
s == *data_.wordPtr
840 : isString() &&
s == *data_.stringPtr
849 type_ == tokenType::LABEL
850 && data_.labelVal ==
val
859 type_ == tokenType::FLOAT_SCALAR
869 type_ == tokenType::DOUBLE_SCALAR