15#ifndef WSFPARSERULE_HPP
16#define WSFPARSERULE_HPP
18#include "wsf_parser_export.h"
24#include "UtReferenceCount.hpp"
25#include "UtTextDocument.hpp"
30class WsfParseActionSub;
47void swap(WsfParseRule& aLhs, WsfParseRule& aRhs);
48void swap(WsfParseAlternate& aLhs, WsfParseAlternate& aRhs);
49void swap(WsfParseAttribute& aLhs, WsfParseAttribute& aRhs);
50void swap(WsfParseNamedRule& aLhs, WsfParseNamedRule& aRhs);
51void swap(WsfParseRuleReference& aLhs, WsfParseRuleReference& aRhs);
52void swap(WsfParseSequence& aLhs, WsfParseSequence& aRhs);
53void swap(WsfParseStruct& aLhs, WsfParseStruct& aRhs);
99 static bool IsValidListTemplate(
const std::string& aTypeName)
noexcept;
104 static bool IsValidObjectMapTemplate(
const std::string& aTypeName)
noexcept;
109 static bool IsValidTemplate(
const std::string& aTypeName)
noexcept;
113 static std::string GetContainedTypeName(
const std::string& aTypeName)
noexcept;
210 virtual void Initialize(
int aSequence);
213 virtual std::vector<WsfParseRule*>
GetSequence() {
return std::vector<WsfParseRule*>(); }
214 virtual std::vector<WsfParseRule*>
GetAlternates() {
return std::vector<WsfParseRule*>(); }
271 std::vector<WsfParseValueType*> CollectTypes();
299 bool ReadRange(
WsfParser& aParser, UtTextDocumentRange& aRange,
WsfParseNode*& aNode,
bool aCreateNode)
override;
376 bool ReadRange(
WsfParser& aParser, UtTextDocumentRange& aRange,
WsfParseNode*& aNode,
bool aCreateNode)
override;
381 std::string GetFullName()
const;
442 bool ReadRange(
WsfParser& aParser, UtTextDocumentRange& aRange,
WsfParseNode*& aNode,
bool aCreateNode)
override;
548 return mBasePtr->GetAttribute(aIndex);
551 size_t GetAttributeCount();
556 if (aBasePtr ==
this)
568 std::vector<ScriptVariable> GetAllScriptVariables();
Definition WsfParseAction.hpp:329
Definition WsfParseAlternate.hpp:22
An attribute which belongs to a WsfParseStruct.
Definition WsfParseRule.hpp:463
std::string mType
Definition WsfParseRule.hpp:483
std::string mName
Definition WsfParseRule.hpp:482
WsfParseValueType * mTypePtr
Definition WsfParseRule.hpp:485
unsigned int mFlags
Definition WsfParseRule.hpp:481
bool mIsPointer
Definition WsfParseRule.hpp:487
bool mHasDefaultValue
Definition WsfParseRule.hpp:486
Flags
Definition WsfParseRule.hpp:466
@ cIS_FIXED
Definition WsfParseRule.hpp:467
WsfParseAttribute()
Definition WsfParseRule.hpp:470
std::string mDefault
Definition WsfParseRule.hpp:484
Definition WsfParseRule.hpp:505
std::vector< NameValue > mNameValues
Definition WsfParseRule.hpp:508
std::pair< std::string, int > NameValue
Definition WsfParseRule.hpp:507
WsfParseEnumerationValues mValues
Definition WsfParseRule.hpp:522
WsfParseEnumeration(WsfParseRuleMemory &aMem, const std::string &aName)
Definition WsfParseRule.hpp:515
Matches a string of text with no whitespace.
Definition WsfParseRule.hpp:309
std::string GetRuleDescription() override
Definition WsfParseRule.hpp:317
bool MatchesString(const std::string &aString)
Definition WsfParseBasicRules.cpp:481
bool mIsTerminator
Definition WsfParseRule.hpp:320
bool mCaseSensitive
Definition WsfParseRule.hpp:319
bool ReadRange(WsfParser &aParser, UtTextDocumentRange &aRange, WsfParseNode *&aNode, bool aCreateNode) override
Definition WsfParseBasicRules.cpp:448
unsigned int mNodeFlags
Definition WsfParseRule.hpp:322
bool Read(WsfParser &aParser, WsfParseNode *&aNode) override
Definition WsfParseBasicRules.cpp:413
std::string mText
Definition WsfParseRule.hpp:321
WsfParseLiteral(WsfParseRuleMemory &aMem)
Definition WsfParseBasicRules.cpp:400
Definition WsfParseRule.hpp:350
WsfParseValue * FindValue(const std::string &aTypeName)
Definition WsfParseRule.cpp:391
std::string mOutputTypeName
Definition WsfParseRule.hpp:411
WsfParseRule * GetPassthrough() override
Definition WsfParseRule.hpp:387
WsfParseNamedRule * mOutputTypePtr
Definition WsfParseRule.hpp:412
WsfParseNamedRule * GetContext() const override
Definition WsfParseRule.hpp:386
std::string GetRuleDescription() override
Definition WsfParseRule.hpp:388
WsfParseRule * GetDefinition() const
Definition WsfParseRule.hpp:383
bool HasNestedRules() const
Definition WsfParseRule.hpp:368
std::string GetFullName() const
Definition WsfParseRule.cpp:295
bool IsPartValueRule()
Definition WsfParseRule.hpp:390
WsfParseNamedRule * Find(const std::string &aRuleName)
Definition WsfParseRule.cpp:365
WsfParseNamedRule(WsfParseRuleMemory &aMem)
Definition WsfParseRule.cpp:235
WsfParseNamedRule * mContextParent
The rule inside of which this rule is nested.
Definition WsfParseRule.hpp:407
std::vector< WsfParseRule * > GetSequence() override
Definition WsfParseRule.hpp:385
WsfParseNamedRule * FindImmediate(const std::string &aRuleName)
Definition WsfParseRule.cpp:381
std::string mInputTypeName
Definition WsfParseRule.hpp:409
WsfParseRuleDictionary * GetNestedRules() override
Definition WsfParseRule.hpp:370
WsfParseRule *& GetDefinition()
Definition WsfParseRule.hpp:384
void Swap(WsfParseNamedRule &aRhs)
Definition WsfParseRule.hpp:392
std::string mName
Definition WsfParseRule.hpp:408
void Initialize(int aSequence) override
Definition WsfParseRule.cpp:335
bool InitializeInputsOutputs()
Definition WsfParseRule.cpp:307
WsfParseRuleDictionary * mNestedRules
Definition WsfParseRule.hpp:418
WsfParseNamedRule * mInputTypePtr
Definition WsfParseRule.hpp:410
std::vector< WsfParseRule * > mReferencingRules
Definition WsfParseRule.hpp:415
WsfParseStruct * FindStruct(const std::string &aRuleName)
Definition WsfParseRule.cpp:355
Definition WsfParseNode.hpp:61
std::vector< WsfParseRule * > GetSequence() override
Definition WsfParseRule.hpp:303
Kind
Definition WsfParseRule.hpp:293
@ cNO_CHANGE
Definition WsfParseRule.hpp:295
@ cERROR_RULE
Definition WsfParseRule.hpp:294
Kind mKind
Definition WsfParseRule.hpp:304
WsfParseRule * GetPassthrough() override
Definition WsfParseRule.hpp:300
WsfParsePassthrough(WsfParseRuleMemory &aMem)
Definition WsfParseRule.hpp:286
Definition WsfParseRecurrence.hpp:21
Definition WsfParseRule.hpp:338
WsfParseNamedRule * Find(const std::string &aRule)
Definition WsfParseRule.cpp:212
void Add(WsfParseNamedRule *aRule)
Definition WsfParseRule.cpp:207
std::map< std::string, WsfParseNamedRule * > NameRuleMap
Definition WsfParseRule.hpp:343
NameRuleMap mNameToRule
Definition WsfParseRule.hpp:344
Definition WsfParseRule.hpp:263
void RuleAdded(WsfParseRule *aRulePtr)
Definition WsfParseRule.hpp:269
std::vector< WsfParseRule * > mRules
Definition WsfParseRule.hpp:272
WsfParseRuleMemory(const WsfParseRuleMemory &)=default
WsfParseRuleMemory()=default
Definition WsfParseRule.hpp:431
void SetReferencedRule(WsfParseRule *aRulePtr)
Definition WsfParseRule.hpp:443
std::vector< WsfParseRule * > GetSequence() override
Definition WsfParseRule.hpp:451
std::string mRuleName
Definition WsfParseRule.hpp:456
WsfParseNamedRule * GetRulePtr()
Definition WsfParseRule.hpp:452
WsfParseRule * GetPassthrough() override
Definition WsfParseRule.hpp:453
WsfParseRuleReference(WsfParseRuleMemory &aMem)
Definition WsfParseRule.hpp:433
std::string GetRuleDescription() override
Definition WsfParseRule.hpp:454
Definition WsfParseRule.hpp:131
WsfParseRule * GetSubordinateRule() const
Definition WsfParseRule.hpp:254
virtual bool ReadRange(WsfParser &aParser, UtTextDocumentRange &aRange, WsfParseNode *&aNode, bool aCreateNode)
Definition WsfParseRule.hpp:197
bool IsNamedRule() const
Definition WsfParseRule.hpp:233
virtual bool Read(WsfParser &aParser, WsfParseNode *&aNode)=0
virtual void Resolve(WsfParser &aParser, WsfParseNode *aNodePtr)
Definition WsfParseRule.hpp:208
WsfParseRule * mSubordinateRulePtr
Definition WsfParseRule.hpp:258
RuleType Type() const
Returns an enumeration specifying the derived type of the reader.
Definition WsfParseRule.hpp:186
virtual WsfParseNamedRule * GetContext() const
Definition WsfParseRule.hpp:216
ReaderFlags
Definition WsfParseRule.hpp:156
@ cIS_VALUE_RULE
Definition WsfParseRule.hpp:168
@ cCAN_RESOLVE
Definition WsfParseRule.hpp:158
@ cCAN_UNDO
Definition WsfParseRule.hpp:160
@ cIS_PASSTHROUGH
Definition WsfParseRule.hpp:165
@ cIS_SINGLE_TOKEN
Definition WsfParseRule.hpp:162
virtual std::string GetRuleDescription()
Definition WsfParseRule.hpp:219
virtual std::vector< WsfParseRule * > GetAlternates()
Definition WsfParseRule.hpp:214
void Swap(WsfParseRule &aRhs)
Definition WsfParseRule.hpp:176
int mReaderFlags
Definition WsfParseRule.hpp:249
void SetSubordinateRule(WsfParseRule *aRulePtr)
Definition WsfParseRule.hpp:255
virtual void Undo(WsfParser &aParser)
Definition WsfParseRule.hpp:204
virtual WsfParseRule * GetPassthrough()
Definition WsfParseRule.hpp:217
WsfParseRule(WsfParseRuleMemory &aMem, RuleType aType)
Definition WsfParseRule.cpp:85
RuleType
Definition WsfParseRule.hpp:134
@ cLINE_STRING
Definition WsfParseRule.hpp:145
@ cSTRING
Definition WsfParseRule.hpp:144
@ cTYPE_LOAD
Definition WsfParseRule.hpp:149
@ cALTERNATE
Definition WsfParseRule.hpp:139
@ cTYPE_COMMAND
Definition WsfParseRule.hpp:150
@ cPASSTHROUGH
Definition WsfParseRule.hpp:151
@ cRULE_REFERENCE
Definition WsfParseRule.hpp:141
@ cNAMED_RULE
Definition WsfParseRule.hpp:135
@ cVALUE
Definition WsfParseRule.hpp:136
@ cQUOTED_STRING
Definition WsfParseRule.hpp:146
@ cRECURRENCE
Definition WsfParseRule.hpp:140
@ cSCRIPT_BLOCK
Definition WsfParseRule.hpp:152
@ cINT
Definition WsfParseRule.hpp:143
@ cDELIMITED
Definition WsfParseRule.hpp:148
@ cSEQUENCE
Definition WsfParseRule.hpp:138
@ cREAL
Definition WsfParseRule.hpp:142
@ cSTRUCT
Definition WsfParseRule.hpp:137
@ cLITERAL
Definition WsfParseRule.hpp:147
virtual WsfParseRuleDictionary * GetNestedRules()
Definition WsfParseRule.hpp:215
WsfParseRule * mParentRulePtr
Pointer to the parent rule. This should be valid for unnamed rules.
Definition WsfParseRule.hpp:253
virtual std::vector< WsfParseRule * > GetSequence()
Definition WsfParseRule.hpp:213
int mUserId
Definition WsfParseRule.hpp:250
virtual ~WsfParseRule()=default
WsfParseRule(const WsfParseRule &)=default
int GetReaderFlags() const
Definition WsfParseRule.hpp:246
RuleType mRuleType
Definition WsfParseRule.hpp:248
virtual WsfParseValueType * GetType()
If the rule is also a type, return the type.
Definition WsfParseRule.hpp:222
Definition WsfParseSequence.hpp:21
Definition WsfParseRule.hpp:527
std::vector< WsfParseAction * > mInitialActions
Definition WsfParseRule.hpp:576
size_t FindAttributeIndex(const std::string &aName)
Definition WsfParseRule.cpp:497
WsfParseValueType * mTypePtr
Definition WsfParseRule.hpp:580
WsfParseStruct * GetBase()
Definition WsfParseRule.hpp:553
WsfParseAttribute & GetAttribute(size_t aIndex)
Definition WsfParseRule.hpp:542
std::vector< WsfParseAttribute > mAttributes
Definition WsfParseRule.hpp:571
std::string mBaseName
Definition WsfParseRule.hpp:572
void Initialize(int aSequence) override
Definition WsfParseRule.cpp:532
WsfParseStruct(WsfParseRuleMemory &aMem, const std::string &aRuleName)
Definition WsfParseRule.cpp:547
bool IsType(WsfParseStruct *aBasePtr)
Definition WsfParseRule.hpp:554
std::vector< ScriptVariable > mScriptVariables
Definition WsfParseRule.hpp:573
WsfParseStruct * mBasePtr
Definition WsfParseRule.hpp:579
WsfParseAttribute * FindAttribute(const std::string &aName)
Definition WsfParseRule.cpp:481
size_t mBaseAttributeCount
Definition WsfParseRule.hpp:570
Definition WsfParseRule.hpp:58
TypeKind mKind
Definition WsfParseRule.hpp:119
static WsfParseValueType * List(WsfParseValueType *aTemplatedType)
Definition WsfParseRule.hpp:77
WsfParseValueType * mTemplateType
Definition WsfParseRule.hpp:123
WsfParseStruct * mStructPtr
Definition WsfParseRule.hpp:121
std::string & GetTypeName()
Definition WsfParseRule.hpp:115
WsfParseValue * mValuePtr
Definition WsfParseRule.hpp:122
static WsfParseValueType * ObjectMap(WsfParseValueType *aTemplatedType)
Definition WsfParseRule.hpp:86
std::string mTypeName
Definition WsfParseRule.hpp:120
WsfParseValueType()
Definition WsfParseRule.hpp:68
TypeKind
Definition WsfParseRule.hpp:61
@ cLIST
Definition WsfParseRule.hpp:64
@ cSTRUCT
Definition WsfParseRule.hpp:62
@ cOBJECT_MAP
Definition WsfParseRule.hpp:65
@ cVALUE
Definition WsfParseRule.hpp:63
Definition WsfParseRule.hpp:492
bool mIsEnumeration
Definition WsfParseRule.hpp:500
~WsfParseValue() override=default
WsfParseValueType * GetType() override
If the rule is also a type, return the type.
Definition WsfParseRule.cpp:664
void Initialize(int aSequence) override
Definition WsfParseRule.cpp:659
WsfParseValueType * mTypePtr
Definition WsfParseRule.hpp:499
WsfParseValue(WsfParseRuleMemory &aMem, const std::string &aName)
Definition WsfParseRule.cpp:648
Definition WsfParser.hpp:36
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
void swap(WsfRoute &aLhs, WsfRoute &aRhs)
Definition WsfRoute.hpp:294
Definition WsfParseRule.hpp:530
std::string mVariableName
Definition WsfParseRule.hpp:533
bool mIsThisType
Definition WsfParseRule.hpp:531
std::string mTypeName
Definition WsfParseRule.hpp:532