WSF
WsfPProxyRuleTrace.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 WSFPPROXYRULETRACE_HPP
16#define WSFPPROXYRULETRACE_HPP
17
18#include <map>
19
20#include "UtCast.hpp"
21#include "UtSortedVector.hpp"
22#include "WsfPProxyI.hpp"
23#include "WsfPProxyPath.hpp"
24#include "WsfPProxyRegistry.hpp"
25#include "WsfParseRule.hpp"
26
27class WsfPProxyIndex;
30
31
33{
34public:
35 struct Contexts
36 {
37 std::vector<std::unique_ptr<WsfPParseRuleTraceContext>> mContextList;
38 };
39
42 void ContextAdded(std::unique_ptr<WsfPParseRuleTraceContext> aContext);
44 Contexts* FindContexts(const WsfPProxyPath& aPath);
45
47
48 void Finalize(WsfPParseRuleTrace* aTraceRoot);
49
51
52 void BeginNode(WsfParseNode* aNodePtr, const WsfPProxyPath& aCurrentPath);
53
55
56 const std::vector<WsfPParseRuleTrace*>& GetCurrentNodes() const { return mBuildNodeStack; }
57 WsfParseRule* GetRootRule() const { return mRootRule; }
58
59protected:
60 void AddToIndex(WsfPParseRuleTrace* aTracePtr);
61 UtSortedVector<size_t, WsfPParseRuleTrace*> mNodeIndexToTrace;
63 std::map<WsfPProxyPath, Contexts> mContextMap;
64
65
66 std::vector<WsfPParseRuleTrace*> mBuildNodeStack;
67 std::map<WsfParseNode*, WsfPParseRuleTrace*> mNodeToTrace;
69};
70
71
73{
74public:
75 friend class WsfPParseRuleTracer;
76
77 // static WsfPParseRuleTrace* BuildTrace(WsfParseNode* aNodePtr,
78 // WsfPParseRuleTracer* aTracerPtr,
79 // WsfPProxyIndex& aProxy);
80
89 WsfPParseRuleTrace* AddChild(WsfPParseRuleTrace* aChild, size_t aIndex = ut::npos);
90 WsfPParseRuleTrace* AddChild(WsfParseRule* aRulePtr, size_t aIndex = ut::npos);
91 WsfPParseRuleTrace* PopChild(size_t aChildIndex = ut::npos)
92 {
93 if (aChildIndex == ut::npos)
94 {
95 aChildIndex = mChildren.size() - 1;
96 }
97 WsfPParseRuleTrace* child = mChildren[aChildIndex];
98 mChildren.erase(mChildren.begin() + aChildIndex);
99 return child;
100 }
103 {
104 if (mParentPtr)
105 {
106 WsfPParseRuleTrace* rootTrace = mParentPtr->FindRootTrace();
107 if (rootTrace)
108 {
109 return rootTrace;
110 }
111 if (mRulePtr)
112 {
113 return this;
114 }
115 }
116 return nullptr;
117 }
118 void SetInsertText(const std::string& aInsertText)
119 {
121 mInsertText = aInsertText;
122 }
124 std::string& GetInsertText() { return mInsertText; }
125 std::string GetText();
126 void SetPruned();
127 bool IsPruned() const { return 0 != (mFlags & cPRUNED); }
128
130 {
131 if (mNodePtr)
132 {
133 return mNodePtr;
134 }
135 for (size_t i = 0; i < mChildren.size(); ++i)
136 {
137 WsfParseNode* nn = mChildren[i]->GetNearestNode();
138 if (nn)
139 {
140 return nn;
141 }
142 }
143 return nullptr;
144 // if (! mParentPtr) return 0;
145 // return mParentPtr->GetNearestNode();
146 }
147 const std::vector<WsfPParseRuleTrace*>& Children() const { return mChildren; }
148 size_t UnprunedChildCount() const
149 {
150 size_t ct = 0;
151 for (size_t i = 0; i < mChildren.size(); ++i)
152 {
153 if (!mChildren[i]->IsPruned())
154 {
155 ++ct;
156 }
157 }
158 return ct;
159 }
160 WsfParseRule* Rule() const { return mRulePtr; }
162 {
163 return (mRulePtr->GetReaderFlags() & WsfParseRule::cIS_PASSTHROUGH) ? mRulePtr->GetPassthrough() : mRulePtr;
164 }
165 void SetRule(WsfParseRule* aRulePtr) { mRulePtr = aRulePtr; }
166
173 {
174 assert(mContextPtr == nullptr);
175 mContextPtr = aContext;
176 }
177 void NewContext(const WsfPProxyPath& aPath);
179 {
180 if (mRulePtr == mTracerPtr->GetRootRule())
181 {
182 return this;
183 }
184 if (mParentPtr)
185 {
186 return mParentPtr->GetTraceRoot();
187 }
188 return nullptr;
189 }
190 // std::vector<WsfPProxyPath> mDefinitions;
191
192protected:
193 void SetPrunedP();
194
195 unsigned int mFlags;
200
201public:
203
204protected:
205 std::vector<WsfPParseRuleTrace*> mChildren;
206 std::string mInsertText;
207};
208
210{
211public:
213 : mTracePtr(nullptr)
214 , mParent(nullptr)
215 , mAddr(aAddr)
216 {
217 }
219 const WsfPProxyPath& GetAddr() const;
221
223 {
224 for (auto* c = this; c != nullptr; c = c->GetParent())
225 {
226 if (c == aContextPtr)
227 {
228 return true;
229 }
230 }
231 return false;
232 }
235
236private:
237 mutable WsfPParseRuleTraceContext* mParent;
238 WsfPProxyPath* mAddr;
239};
240
241
242#endif
Definition WsfPProxyRuleTrace.hpp:210
WsfPParseRuleTraceContext(WsfPProxyPath *aAddr=nullptr)
Definition WsfPProxyRuleTrace.hpp:212
~WsfPParseRuleTraceContext()
Definition WsfPProxyRuleTrace.cpp:330
WsfPParseRuleTrace * Trace()
Definition WsfPProxyRuleTrace.hpp:233
const WsfPProxyPath & GetAddr() const
Definition WsfPProxyRuleTrace.cpp:294
WsfPParseRuleTraceContext * GetParent() const
Definition WsfPProxyRuleTrace.cpp:308
bool HasAncestor(WsfPParseRuleTraceContext *aContextPtr)
Definition WsfPProxyRuleTrace.hpp:222
WsfPParseRuleTrace * mTracePtr
Definition WsfPProxyRuleTrace.hpp:234
Definition WsfPProxyRuleTrace.hpp:73
WsfParseRule * mRulePtr
Definition WsfPProxyRuleTrace.hpp:199
WsfParseRule * Rule() const
Definition WsfPProxyRuleTrace.hpp:160
WsfPParseRuleTracer & Tracer()
Definition WsfPProxyRuleTrace.hpp:167
void SetRule(WsfParseRule *aRulePtr)
Definition WsfPProxyRuleTrace.hpp:165
const std::vector< WsfPParseRuleTrace * > & Children() const
Definition WsfPProxyRuleTrace.hpp:147
std::string mInsertText
Definition WsfPProxyRuleTrace.hpp:206
void NewContext(const WsfPProxyPath &aPath)
Definition WsfPProxyRuleTrace.cpp:163
unsigned int mFlags
Definition WsfPProxyRuleTrace.hpp:195
WsfPParseRuleTraceContext * mContextPtr
Definition WsfPProxyRuleTrace.hpp:198
bool HasInsertText()
Definition WsfPProxyRuleTrace.hpp:123
WsfPParseRuleTrace * AddChild(WsfPParseRuleTrace *aChild, size_t aIndex=ut::npos)
Definition WsfPProxyRuleTrace.cpp:232
bool IsPruned() const
Definition WsfPProxyRuleTrace.hpp:127
WsfParseNode * GetNearestNode()
Definition WsfPProxyRuleTrace.hpp:129
void SetPrunedP()
Definition WsfPProxyRuleTrace.cpp:202
WsfPParseRuleTrace * LastChild()
Definition WsfPProxyRuleTrace.hpp:101
WsfPParseRuleTracer * mTracerPtr
Definition WsfPProxyRuleTrace.hpp:196
WsfPParseRuleTrace * GetParent()
Definition WsfPProxyRuleTrace.hpp:168
std::string GetText()
Definition WsfPProxyRuleTrace.cpp:137
size_t UnprunedChildCount() const
Definition WsfPProxyRuleTrace.hpp:148
WsfPParseRuleTraceContext * GetContext()
Definition WsfPProxyRuleTrace.hpp:170
friend class WsfPParseRuleTracer
Definition WsfPProxyRuleTrace.hpp:75
WsfPParseRuleTraceContext * EnclosingContext()
Definition WsfPProxyRuleTrace.cpp:172
WsfParseRule * ActualRule() const
Definition WsfPProxyRuleTrace.hpp:161
void SetContext(WsfPParseRuleTraceContext *aContext)
Definition WsfPProxyRuleTrace.hpp:172
WsfPParseRuleTrace * FindRootTrace()
Definition WsfPProxyRuleTrace.hpp:102
~WsfPParseRuleTrace()
Definition WsfPProxyRuleTrace.cpp:150
WsfParseNode * mNodePtr
Definition WsfPProxyRuleTrace.hpp:202
WsfPParseRuleTrace * PopChild(size_t aChildIndex=ut::npos)
Definition WsfPProxyRuleTrace.hpp:91
WsfPParseRuleTrace * GetTraceRoot()
Definition WsfPProxyRuleTrace.hpp:178
Flags
Definition WsfPProxyRuleTrace.hpp:84
@ cPRUNED
Definition WsfPProxyRuleTrace.hpp:86
@ cINTERMEDIATE_TRACE
Definition WsfPProxyRuleTrace.hpp:87
@ cHAS_INSERT_TEXT
Definition WsfPProxyRuleTrace.hpp:85
void SetPruned()
Definition WsfPProxyRuleTrace.cpp:186
WsfParseNode * GetActualNode()
Definition WsfPProxyRuleTrace.cpp:219
std::string & GetInsertText()
Definition WsfPProxyRuleTrace.hpp:124
void SetInsertText(const std::string &aInsertText)
Definition WsfPProxyRuleTrace.hpp:118
WsfPParseRuleTrace(WsfPParseRuleTracer *aTracer)
Definition WsfPProxyRuleTrace.cpp:283
std::vector< WsfPParseRuleTrace * > mChildren
Definition WsfPProxyRuleTrace.hpp:205
WsfPParseRuleTrace * mParentPtr
Definition WsfPProxyRuleTrace.hpp:197
std::map< WsfPProxyPath, Contexts > mContextMap
Definition WsfPProxyRuleTrace.hpp:63
WsfPParseRuleTrace * FindTrace(WsfParseNode *aNodePtr)
Definition WsfPProxyRuleTrace.cpp:365
const std::vector< WsfPParseRuleTrace * > & GetCurrentNodes() const
Definition WsfPProxyRuleTrace.hpp:56
WsfParseRule * GetRootRule() const
Definition WsfPProxyRuleTrace.hpp:57
void BeginNode(WsfParseNode *aNodePtr, const WsfPProxyPath &aCurrentPath)
Definition WsfPProxyRuleTrace.cpp:395
void ContextRemoved(WsfPParseRuleTraceContext *aContext)
Definition WsfPProxyRuleTrace.cpp:341
UtSortedVector< size_t, WsfPParseRuleTrace * > mNodeIndexToTrace
Definition WsfPProxyRuleTrace.hpp:61
WsfPParseRuleTrace * Root()
Definition WsfPProxyRuleTrace.hpp:50
Contexts * FindContexts(const WsfPProxyPath &aPath)
Definition WsfPProxyRuleTrace.cpp:355
void ContextAdded(std::unique_ptr< WsfPParseRuleTraceContext > aContext)
Definition WsfPProxyRuleTrace.cpp:335
WsfPParseRuleTrace * mRoot
Definition WsfPProxyRuleTrace.hpp:62
WsfPParseRuleTracer(WsfPProxyRegistry *aRegistry)
Definition WsfPProxyRuleTrace.cpp:497
~WsfPParseRuleTracer()
Definition WsfPProxyRuleTrace.cpp:503
std::vector< WsfPParseRuleTrace * > mBuildNodeStack
Definition WsfPProxyRuleTrace.hpp:66
void Finalize(WsfPParseRuleTrace *aTraceRoot)
Definition WsfPProxyRuleTrace.cpp:375
WsfPParseRuleTrace * EndNode(WsfParseNode *aNodePtr)
Definition WsfPProxyRuleTrace.cpp:485
void AddToIndex(WsfPParseRuleTrace *aTracePtr)
Definition WsfPProxyRuleTrace.cpp:382
WsfParseRule * mRootRule
Definition WsfPProxyRuleTrace.hpp:68
std::map< WsfParseNode *, WsfPParseRuleTrace * > mNodeToTrace
Definition WsfPProxyRuleTrace.hpp:67
Definition WsfPProxyIndex.hpp:96
Represents a path or unique key to a value in the proxy.
Definition WsfPProxyPath.hpp:64
Definition WsfPProxyRegistry.hpp:37
Definition WsfParseNode.hpp:61
Definition WsfParseRule.hpp:131
@ cIS_PASSTHROUGH
Definition WsfParseRule.hpp:165
Definition WsfPProxyRuleTrace.hpp:36
std::vector< std::unique_ptr< WsfPParseRuleTraceContext > > mContextList
Definition WsfPProxyRuleTrace.hpp:37
Copyrights Multiple, All Rights Reserved