WSF
WsfExtensionList.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 WSFEXTENSIONLIST_HPP
13#define WSFEXTENSIONLIST_HPP
14
15#include "wsf_export.h"
16
17#include <map>
18#include <memory>
19#include <set>
20#include <string>
21#include <vector>
22
23#include "WsfException.hpp"
24#include "WsfExtension.hpp"
25
28{
29public:
30 WsfUnknownExtension(const std::string& aName);
31 ~WsfUnknownExtension() override = default;
32};
33
36{
37public:
38 WsfDuplicateExtension(const std::string& aName);
39 ~WsfDuplicateExtension() override = default;
40};
41
46{
47public:
48 WsfExtensionList() = default;
51 ~WsfExtensionList() = default;
52
56 {
58 std::string mExtensionName;
61 // When 'false', the dependency must be ordered first when available.
63 };
64
65 using DependencyList = std::vector<std::pair<std::string, Dependency>>;
66 using ExtensionMap = std::map<std::string, std::unique_ptr<WsfExtension>>;
67 using iterator = ExtensionMap::iterator;
68 using const_iterator = ExtensionMap::const_iterator;
69
71
72 void AddExtension(const std::string& aName, std::unique_ptr<WsfExtension> aExtensionPtr);
73
74 WsfExtension* FindExtension(const std::string& aName) const;
75 WsfExtension& GetExtension(const std::string& aName) const;
76
77 const std::vector<std::string>& GetExtensionOrder() const { return mExtensionOrder; }
78 std::vector<WsfExtension*> GetExtensionsInOrder() const;
79 const ExtensionMap& GetExtensions() const { return mExtensions; }
81
83
84 void AddDependency(const std::string& aExtensionName, const std::string& aDependsOnExtensionName, bool aRequired);
85 const DependencyList& GetDependencies() const { return mDependencies; }
87
89
90 const_iterator begin() const { return mExtensions.begin(); }
91 const_iterator end() const { return mExtensions.end(); }
93
95
96 void SortExtensions();
98
99private:
100 bool SortExtensionsP(const std::set<std::string>& aAllExtensionNames,
101 std::vector<std::string>& aNewOrder,
102 std::set<std::string>& aIncludedExtensions,
103 std::set<std::string>& aExtensionsAdding,
104 const std::string& aExtensionToAdd,
105 bool aRequired);
106
107 DependencyList mDependencies;
108 std::vector<std::string> mExtensionOrder;
109 ExtensionMap mExtensions;
110};
111
112#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
~WsfDuplicateExtension() override=default
WsfDuplicateExtension(const std::string &aName)
Definition WsfExtensionList.cpp:150
WsfException(const std::string &aWhat) noexcept
Definition WsfException.hpp:24
const ExtensionMap & GetExtensions() const
Definition WsfExtensionList.hpp:79
void AddExtension(const std::string &aName, std::unique_ptr< WsfExtension > aExtensionPtr)
Definition WsfExtensionList.cpp:20
WsfExtension & GetExtension(const std::string &aName) const
Definition WsfExtensionList.cpp:49
const_iterator end() const
Definition WsfExtensionList.hpp:91
WsfExtensionList & operator=(const WsfExtensionList &)=delete
WsfExtension * FindExtension(const std::string &aName) const
Definition WsfExtensionList.cpp:34
ExtensionMap::const_iterator const_iterator
Definition WsfExtensionList.hpp:68
std::vector< std::pair< std::string, Dependency > > DependencyList
Definition WsfExtensionList.hpp:65
~WsfExtensionList()=default
const DependencyList & GetDependencies() const
Definition WsfExtensionList.hpp:85
const_iterator begin() const
Definition WsfExtensionList.hpp:90
ExtensionMap::iterator iterator
Definition WsfExtensionList.hpp:67
WsfExtensionList(const WsfExtensionList &)=delete
std::map< std::string, std::unique_ptr< WsfExtension > > ExtensionMap
Definition WsfExtensionList.hpp:66
const std::vector< std::string > & GetExtensionOrder() const
Definition WsfExtensionList.hpp:77
WsfExtensionList()=default
The base class for application, scenario and simulation extensions.
Definition WsfExtension.hpp:25
WsfUnknownExtension(const std::string &aName)
Definition WsfExtensionList.cpp:156
~WsfUnknownExtension() override=default
Definition WsfExtensionList.hpp:56
std::string mExtensionName
The name of the dependency extension.
Definition WsfExtensionList.hpp:58
bool mRequired
Definition WsfExtensionList.hpp:62
Copyrights Multiple, All Rights Reserved