WSF
WsfDeferredInput.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#ifndef WSFDEFERREDINPUT_HPP
13#define WSFDEFERREDINPUT_HPP
14
15#include "wsf_export.h"
16
17#include <functional>
18#include <map>
19#include <set>
20#include <string>
21
22#include "UtInput.hpp"
23
42{
43public:
44 using UniqueId = std::pair<std::string, std::string>;
45 using ProcessInputFunction = std::function<bool(UtInput&)>;
46
48
51 bool IsDelayLoading() { return IsDelayLoadingP(); }
52
53 // Wait until all input is read to continue reading this value.
54 void DelayLoad(const std::string& aKind,
55 const std::string& aName,
56 const UtInput::StoredLocation& aPosition,
57 const ProcessInputFunction& aInputFunction)
58 {
59 return DelayLoadP(aKind, aName, aPosition, aInputFunction);
60 }
61
62 // Ensures that the object with the specified kind and name is loaded.
63 // Throws an error if a cyclic dependency is found, or the required object is not found.
64 void Requires(const std::string& aKind, const std::string& aName) { RequiresP(aKind, aName); }
65
66 void MaybeRequires(const std::string& aKind, const std::string& aName);
67
68 // Execute all delay loaders
69 void Resolve(UtInput& aInput) { ResolveP(aInput); }
70
71 void Clear() { ClearP(); }
72
74
75 struct Loader
76 {
77 Loader() = default;
78 ~Loader() = default;
79 UtInput::StoredLocation mLocation;
81 };
82
83protected:
84 bool IsDelayLoadingP();
85
86 // Wait until all input is read to continue reading this value.
87 void DelayLoadP(const std::string& aKind,
88 const std::string& aName,
89 const UtInput::StoredLocation& aPosition,
90 const ProcessInputFunction& aInputFunction);
91
92 // Ensures that the object with the specified kind and name is loaded.
93 // Throws an error if a cyclic dependency is found, or the required object is not found.
94 void RequiresP(const std::string& aKind, const std::string& aName);
95
96 // Execute all delay loaders
97 void ResolveP(UtInput& aInput);
98
99 void ResetDelaysP();
100
101 void ClearP();
102
103 using LoaderMap = std::multimap<UniqueId, Loader>;
107 std::set<UniqueId> mCurrentlyLoading;
108 std::vector<UtInput*> mInputStack;
109 std::set<UniqueId> mCompleted;
110 std::vector<UniqueId> mDelayLoadOrder;
111};
112
113#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
std::pair< std::string, std::string > UniqueId
Definition WsfDeferredInput.hpp:44
void Resolve(UtInput &aInput)
Definition WsfDeferredInput.hpp:69
std::function< bool(UtInput &)> ProcessInputFunction
Definition WsfDeferredInput.hpp:45
void ResolveP(UtInput &aInput)
Definition WsfDeferredInput.cpp:155
bool mIsDelayLoading
Definition WsfDeferredInput.hpp:104
void DelayLoadP(const std::string &aKind, const std::string &aName, const UtInput::StoredLocation &aPosition, const ProcessInputFunction &aInputFunction)
Definition WsfDeferredInput.cpp:43
std::set< UniqueId > mCurrentlyLoading
Definition WsfDeferredInput.hpp:107
bool IsDelayLoading()
Definition WsfDeferredInput.hpp:51
void Clear()
Definition WsfDeferredInput.hpp:71
std::vector< UtInput * > mInputStack
Definition WsfDeferredInput.hpp:108
std::set< UniqueId > mCompleted
Definition WsfDeferredInput.hpp:109
void ResetDelaysP()
Definition WsfDeferredInput.cpp:171
WsfDeferredInput()
Definition WsfDeferredInput.cpp:20
void RequiresP(const std::string &aKind, const std::string &aName)
Definition WsfDeferredInput.cpp:67
UtInput * mRootInputPtr
Definition WsfDeferredInput.hpp:105
void ResetDelays()
Definition WsfDeferredInput.hpp:73
bool IsDelayLoadingP()
Definition WsfDeferredInput.cpp:166
LoaderMap mDelayLoaders
Definition WsfDeferredInput.hpp:106
std::multimap< UniqueId, Loader > LoaderMap
Definition WsfDeferredInput.hpp:103
void Requires(const std::string &aKind, const std::string &aName)
Definition WsfDeferredInput.hpp:64
void ClearP()
Definition WsfDeferredInput.cpp:31
void DelayLoad(const std::string &aKind, const std::string &aName, const UtInput::StoredLocation &aPosition, const ProcessInputFunction &aInputFunction)
Definition WsfDeferredInput.hpp:54
std::vector< UniqueId > mDelayLoadOrder
Definition WsfDeferredInput.hpp:110
ProcessInputFunction mInputFunction
Definition WsfDeferredInput.hpp:80
UtInput::StoredLocation mLocation
Definition WsfDeferredInput.hpp:79
Copyrights Multiple, All Rights Reserved