WSF
WsfParseSequence.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11// ****************************************************************************
12// Updated by Infoscitex, a DCS Company.
13// ****************************************************************************
14
15#ifndef WSFPARSESEQUENCE_HPP
16#define WSFPARSESEQUENCE_HPP
17#include "WsfParseRule.hpp"
18
19// A sequence of rules
21{
22public:
24 ~WsfParseSequence() override;
25 bool Read(WsfParser& aParser, WsfParseNode*& aNode) override;
26 bool ReadRange(WsfParser& aParser, UtTextDocumentRange& aRange, WsfParseNode*& aNode, bool aCreateNode) override;
27 void Initialize(int aSequence) override;
28
29 void ResolveChildren(WsfParser& aParser, WsfParseNode* aNode);
30 void UndoChildren(WsfParser& aParser, size_t aMaxIndex);
31
32 std::vector<WsfParseRule*> GetSequence() override { return mSequence; }
33
34 const std::vector<WsfParseRule*>& Sequence() const { return mSequence; }
35 std::vector<WsfParseRule*>& ChangeSequence() { return mSequence; }
36 void AddRule(WsfParseRule* aRulePtr)
37 {
38 mSequence.push_back(aRulePtr);
39 aRulePtr->mParentRulePtr = this;
40 }
42 void SetAction(size_t aIndex, WsfParseAction* aActionPtr);
43 WsfParseAction* GetActionBefore(size_t aSequenceIndex) const
44 {
45 return (mActions.size() <= aSequenceIndex) ? nullptr : mActions[aSequenceIndex];
46 }
47 // relinquishes ownership of an action
48 WsfParseAction* TakeActionBefore(size_t aSequenceIndex)
49 {
50 WsfParseAction* rval = mActions[aSequenceIndex];
51 mActions[aSequenceIndex] = nullptr;
52 return rval;
53 }
54
55 bool HasActions() const { return !mActions.empty(); }
56 std::string GetRuleDescription() override;
57 size_t FindChildIndex(WsfParseRule* aChildPtr)
58 {
59 auto s = std::find(mSequence.begin(), mSequence.end(), aChildPtr);
60 return (s != mSequence.end()) ? ut::safe_cast<size_t, ptrdiff_t>(std::distance(mSequence.begin(), s)) : ut::npos;
61 }
62 size_t FindActionIndex(WsfParseAction* aActionPtr)
63 {
64 auto a = std::find(mActions.begin(), mActions.end(), aActionPtr);
65 return (a != mActions.end()) ? ut::safe_cast<size_t, ptrdiff_t>(std::distance(mActions.begin(), a)) : ut::npos;
66 }
67
68protected:
69 bool CompleteDelayLoad(WsfParser& aParser, WsfParseNode*& aNode, WsfParseNode* aThisNodePtr);
70
71 std::vector<WsfParseRule*> mSequence;
72 std::vector<WsfParseAction*> mActions;
73
74public:
80 // If this sequence is delay-loaded, this is the index
81 // of the reader which reads the type
83};
84#endif
Definition WsfParseAction.hpp:329
Definition WsfParseNode.hpp:61
Definition WsfParseRule.hpp:263
WsfParseRule(WsfParseRuleMemory &aMem, RuleType aType)
Definition WsfParseRule.cpp:85
WsfParseRule * mParentRulePtr
Pointer to the parent rule. This should be valid for unnamed rules.
Definition WsfParseRule.hpp:253
size_t FindActionIndex(WsfParseAction *aActionPtr)
Definition WsfParseSequence.hpp:62
size_t mDelayLoadIndex
Definition WsfParseSequence.hpp:82
void UndoChildren(WsfParser &aParser, size_t aMaxIndex)
Definition WsfParseSequence.cpp:198
void AddRule(WsfParseRule *aRulePtr)
Definition WsfParseSequence.hpp:36
size_t FindChildIndex(WsfParseRule *aChildPtr)
Definition WsfParseSequence.hpp:57
bool mHasUndoValues
Definition WsfParseSequence.hpp:78
std::vector< WsfParseRule * > & ChangeSequence()
Definition WsfParseSequence.hpp:35
std::vector< WsfParseRule * > GetSequence() override
Definition WsfParseSequence.hpp:32
void SetAction(size_t aIndex, WsfParseAction *aActionPtr)
Definition WsfParseSequence.cpp:312
void Swap(WsfParseSequence &aRhs)
Definition WsfParseSequence.hpp:41
const std::vector< WsfParseRule * > & Sequence() const
Definition WsfParseSequence.hpp:34
int mNodeFlags
Definition WsfParseSequence.hpp:79
bool ReadRange(WsfParser &aParser, UtTextDocumentRange &aRange, WsfParseNode *&aNode, bool aCreateNode) override
Definition WsfParseSequence.cpp:143
WsfParseAction * TakeActionBefore(size_t aSequenceIndex)
Definition WsfParseSequence.hpp:48
bool Read(WsfParser &aParser, WsfParseNode *&aNode) override
Definition WsfParseSequence.cpp:50
void ResolveChildren(WsfParser &aParser, WsfParseNode *aNode)
Definition WsfParseSequence.cpp:187
WsfParseSequence(WsfParseRuleMemory &aMem)
Definition WsfParseSequence.cpp:32
bool mHasResolutionValues
Definition WsfParseSequence.hpp:77
bool CompleteDelayLoad(WsfParser &aParser, WsfParseNode *&aNode, WsfParseNode *aThisNodePtr)
Definition WsfParseSequence.cpp:229
~WsfParseSequence() override
Definition WsfParseSequence.cpp:42
std::string GetRuleDescription() override
Definition WsfParseSequence.cpp:213
WsfParseAction * GetActionBefore(size_t aSequenceIndex) const
Definition WsfParseSequence.hpp:43
std::vector< WsfParseRule * > mSequence
Definition WsfParseSequence.hpp:71
bool mSpecialCommand
Does the command require special handling.
Definition WsfParseSequence.hpp:76
std::vector< WsfParseAction * > mActions
Definition WsfParseSequence.hpp:72
void Initialize(int aSequence) override
Definition WsfParseSequence.cpp:152
bool HasActions() const
Definition WsfParseSequence.hpp:55
Definition WsfParser.hpp:36
void swap(WsfRoute &aLhs, WsfRoute &aRhs)
Definition WsfRoute.hpp:294
Copyrights Multiple, All Rights Reserved