11 return ILockable::AcquireLock(
Timeout);
25 return std::move(Lock);
59 User.first->CheckLinkedObjectStates();
67 0, [](
size_t CurrentValue,
const auto& User) {
68 return CurrentValue + User.second;
77 IDs.push_back(User.first->GetID());
84 std::string Names(
"Items making use of this item:");
86 Names +=
"\n- " + User.first->GetObjectName() +
" (" + User.first->GetCategoryAndName() +
")";
95 if (Value == std::numeric_limits<std::remove_reference_t<decltype(Value)>>::max())
103 auto ValueIt =
UserList.find(&User);
107 if (ValueIt->second == 0)
109 if (--ValueIt->second == 0)
114 std::string ParamName, std::string_view ParamTitle, std::string_view ParamDescription,
bool NeedsResetToApplyChange)
115 : ParamsBaseOnly(*this), Owner(Owner), UserEditable(true),
116 ParamName(ParamName), ParamTitle(ParamTitle), ParamDescription(ParamDescription), NeedsResetToApplyChange(NeedsResetToApplyChange)
126 : ParamsBaseOnly(*this), Owner(Owner), UserEditable(false),
127 ParamName(ParamName), NeedsResetToApplyChange(false)
139 QDomElement Node = Document.createElement(GetParamName().data());
140 ToXMLNodeChild(Document, Node);
149 FromXMLNodeChild(XMLElement);
155 Util::EventLog().
Log(
"Parameter \"" + std::string(GetParamName()) +
"\" has not been found in configuration file. Assuming default value.",
166 bool IsValid = ValidateChild();
172 Util::EventLog().
Log(
"Parameter \"" + std::string(GetParamName()) +
"\" has been reset to its default value since it was invalid.",
181 if (CurrentParam == Params.ObjectLinkParams.cend())
184 if (!EnsureReadyStateCalledForCurrentParam)
186 CurrentParam->get().EnsureReadyState();
187 EnsureReadyStateCalledForCurrentParam =
true;
189 else if (CurrentParam->get().IsReady())
192 EnsureReadyStateCalledForCurrentParam =
false;
205 QDomElement CurrentNode = MainNode;
209 if (CurrentNode.tagName() != OwnedParam.ClassTag)
211 QDomElement SubNode = Document.createElement(OwnedParam.ClassTag);
212 CurrentNode = CurrentNode.appendChild(SubNode).toElement();
215 if (!OwnedParam.OwnedParam.get().GetParamName().empty())
216 CurrentNode.appendChild(OwnedParam.OwnedParam.get().ToXMLNode(Document));
230 if (CurrentNode.tagName() != OwnedParam.ClassTag)
235 std::string MissingParamName(OwnedParam.OwnedParam.get().GetParamName());
237 "\" has not been found in configuration file." +
238 (MissingParamName.empty() ?
"" :
239 (
" Assuming default value for parameter \"" + MissingParamName +
"\".")),
244 OwnedParam.OwnedParam.get().Reset();
253 if (!OwnedParam.OwnedParam.get().GetParamName().empty())
254 OwnedParam.OwnedParam.get().FromXMLNode(CurrentNode);
265 if (OwnedParam.OwnedParam.get().IsUserEditable())
266 OwnedParam.OwnedParam.get().ParamsBaseOnly.AddToDialog(Dialog);
273 bool AllValid =
true;
276 AllValid &= OwnedParams.OwnedParam.get().Validate();
285 {
"Allow usage by only a single other item", UsageType::Unique },
286 {
"Allow usage by multiple other items", UsageType::Shared }
294 Param.ParamsBaseOnly.DisableUserEditable();
317 auto ConfigDlg = std::make_unique<ParamsConfigDialog>(DialogParent,
Core, std::string(
"New ") + Params->ObjectName.Get());
319 Params->ConfigFromDialog(*ConfigDlg);
321 return ConfigDlg->Display() ? std::move(Params) :
nullptr;
328 Params->ConfigFromXML(XMLElement);
334 QWidget*
const DialogParent)
const
336 std::unique_ptr<ParamsConfigDialog> ConfigDlg;
340 ConfigDlg = std::make_unique<ParamsConfigDialog>(DialogParent,
Core, std::string(
"Edit ") + ParamsPtr->ObjectName.Get());
342 ParamsPtr->ConfigFromDialog(*ConfigDlg);
345 auto Accepted = ConfigDlg->Display(Obj);
347 return { Accepted, ConfigDlg->IsResetRequired() };
352 if (Category.empty())
355 return Category +
" -> " + Name;
359 : LinkedObjectWrapperOnly(*this), OwnerThreadID(OwnerThreadID), Params(std::move(Params))
391 "According to the item's \"Usage type\" setting, it can only be used by a single other item. Since it is already in use, it cannot be used by another item."
400 Parent.UserList.Deregister(User,
Timeout);
413 "This item is currently being used by at least another item. Stop and reset these items before resetting this item."
430 "This item is currently being used by at least another item. Stop and reset these items before deleting this item."
472 "This function must be called from the thread managing this object. A call from another instrument or module thread is not supported.");
492 {
"Start item as soon as it is created", RunnableObjectParams::StartupType::OnCreation },
493 {
"Start item as soon as it is required by another item", RunnableObjectParams::StartupType::Automatic },
494 {
"Start item only manually", RunnableObjectParams::StartupType::Manual }
502 if (!ConfigureStartupType())
503 DisableUserEditable(Startup);
514 return "This item is currently being used by at least another item. Stop and reset these items before stopping this item."
515 + std::string(
"\n\n") + GetUserNames().data();
534 Util::EventLog().
Log(
"Could not terminate thread in the runnable's destructor. Timeout occurred. Execution cannot continue.",
543 Util::EventLog().
Log(
"Could not terminate thread in the runnable's destructor. The runnable is still in use. Execution cannot continue.",
556 "A runnable is in an error state. It requires to be reset in order to transition into a ready state.");
559 int Result = QDialog::Accepted;
564 StartupDialog->SetCheckFinishedFunction(LinkParamStarter);
567 Result = StartupDialog->exec();
570 if (StartupDialog && Result != QDialog::Accepted)
572 if (StartupDialog->GetException())
573 std::rethrow_exception(StartupDialog->GetException());
598 if (
Params->Startup == RunnableObjectParams::StartupType::Automatic)
611 if (
Params->Startup == RunnableObjectParams::StartupType::OnCreation)
645 std::promise<void> ThreadExitedPromise;
648 return ThreadExitedPromise;
653 this->Thread = std::move(Thread);
658 return std::this_thread::get_id() ==
Thread.get_id();
665 "This function must be called from this runnable's thread. A call from another thread is not supported.");
755 Owner(Owner), ThreadExitedPromise(std::move(ThreadExitedPromise))
761 : ParamsGetter(Other.ParamsGetter), Owner(Other.Owner), ThreadExitedPromise(std::move(Other.ThreadExitedPromise)),
762 OwnedLinkedObjectWrappers(std::move(Other.OwnedLinkedObjectWrappers))
772 i.OwnedLinkedObjectWrapperContainer.Reset();
778 bool AnyDestinyNotReady =
false;
780 if (
GetOwner().RunnableInstanceOnly.IsLinkedObjStateCheckRequested())
782 GetOwner().RunnableInstanceOnly.ResetLinkedObjStateCheckRequested();
785 Wrapper.OwnedLinkedObjectWrapperContainer.CheckIfReady();
792 AnyDestinyNotReady =
true;
794 if (Wrapper.OwnedLinkedObjectWrapperPtr->IsRegistered())
795 Wrapper.OwnedLinkedObjectWrapperPtr->Deregister(std::chrono::milliseconds(100));
812 return !AnyDestinyNotReady;
817 std::string Names(
"Linked items not being in a ready state:");
820 Names +=
"\n- " + Wrapper.OwnedLinkedObjectWrapperContainer.GetLinkedObjectDesc();
834 GetOwner().RunnableInstanceOnly.OnThreadHasExited();
Defines DynExp's core module as an interface between the UI and DynExp objects.
Implementation of DynExp objects as the base for derived resources and implementation of the object p...
virtual ~ConfiguratorBase()=0
ParamsBasePtrType MakeConfigFromXML(ItemIDType ID, const DynExpCore &Core, const QDomElement &XMLElement) const
Retrieves the configuration from an XML node to create an instance of the related Object's parameter ...
ParamsBasePtrType MakeConfigFromDialog(ItemIDType ID, const DynExpCore &Core, QWidget *const DialogParent) const
Sets up and displays a configuration dialog. The user input is used to create an instance of the rela...
UpdateConfigFromDialogResult UpdateConfigFromDialog(Object *Obj, const DynExpCore &Core, QWidget *const DialogParent) const
Updates an Object's Obj parameters from a configuration dialog. Sets up and displays this dialog.
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
const Object & GetOwner() const noexcept
Returns the owner of this wrapper.
virtual ~LinkedObjectWrapperBase()=0
const RunnableInstance & Owner
Instance of class RunnableInstance managing the wrapper.
void Reset() noexcept
Removes any linked LinkedObjectWrapper and updates LinkedObjectState.
virtual ~LinkedObjectWrapperContainerBase()=0
LinkedObjectStateType LinkedObjectState
Stores the current state of this LinkedObjectWrapperContainerBase instance. Refer to LinkedObjectStat...
virtual void ResetChild() noexcept=0
Removes any linked LinkedObjectWrapper and updates LinkedObjectState.
virtual ~ObjectLinkBase()=0
static constexpr std::chrono::milliseconds LockObjectTimeoutDefault
Default timeout used by classes ObjectLinkt and RunnableInstance to be passed to LinkedObjectWrapper:...
std::string GetUserNamesString(std::chrono::milliseconds Timeout=std::chrono::milliseconds(0)) const
Builds a string describing which users are registered containing their object names,...
void Deregister(const Object &User, const std::chrono::milliseconds Timeout=std::chrono::milliseconds(0))
Deregisters a user in a thread-safe way.
std::string GetUserNamesStringUnsafe() const
void Register(const Object &User, const std::chrono::milliseconds Timeout=std::chrono::milliseconds(0))
Registers a user in a thread-safe way.
std::unordered_map< const Object *, size_t > UserList
Map containing pointers to all users making use of this ObjectUserList instance's owner as keys and t...
void DeregisterAllUnsafe()
Deregisters all users and notifies them that they need to check the states of their used linked objec...
size_t CountUsersUnsafe() const
size_t CountUsers(std::chrono::milliseconds Timeout=std::chrono::milliseconds(0)) const
Counts the registered useres in a thread-safe way.
ItemIDListType GetUserIDsUnsafe() const
void DeregisterUnsafe(const Object &User)
Deregisters a user.
void RegisterUnsafe(const Object &User)
Registers a user.
Util::ILockable::LockType AcquireLock(const std::chrono::milliseconds Timeout=DefaultTimeout) const
Locks the user list for thread-safe manipulation.
ItemIDListType GetUserIDs(std::chrono::milliseconds Timeout=std::chrono::milliseconds(0)) const
Returns a list of the IDs of the registered users in a thread-safe way.
void DeregisterUser(const Object &User, const std::chrono::milliseconds Timeout) const
Deregisters a user in a thread-safe way.
Object & Parent
Owning Object instance.
void RegisterUser(const Object &User, const std::chrono::milliseconds Timeout) const
Registers a user in a thread-safe way.
Base class for all DynExp Objects like hardware adapters (DynExp::HardwareAdapterBase),...
Object(const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params)
Constructs an Object instance.
void SetWarning(std::string Description, int ErrorCode) const
Setter for Object::Warning. Sets the warning by a description and an error code.
ParamsConstTypeSyncPtrType GetParams(const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const
Locks the mutex of the parameter class instance Params assigned to this Object instance and returns a...
std::string GetCategoryAndName() const
Builds a string from an Object's category and name to allow the user to identify an Object's type.
Util::SynchronizedPointer< const ParamsType > ParamsConstTypeSyncPtrType
Alias for the return type of Object::GetParams() const. Parameters wrapped into Util::SynchronizedPoi...
Util::Warning Warning
Last warning which occurred within this Object instance. (Logical const-ness: see above....
virtual void EnsureReadyStateChild(bool IsAutomaticStartup)=0
Ensures that this Object instance is ready by possibly starting its worker thread or by opening conne...
void LogWarning() const
Writes Object::Warning to the event log returned by Util::EventLog().
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
virtual void ResetImpl(dispatch_tag< Object >)=0
Refer to DynExp::Object::Reset(). Using tag dispatch mechanism to ensure that ResetImpl() of every de...
void BlockIfUnused(const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout)
Blocks this Object instance setting Object::IsBlocked to true. Refer to Object::IsBlocked for the con...
bool IsUnusedUnsafe()
Returns whether this Object instance is used by other instances (not thread-safe).
bool IsUnused(const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const
Returns whether this Object instance is used by other instances.
void ClearWarning() const
Resets Object::Warning.
void Reset()
Resets this Object instance (including all its derived classes) by calling ResetImpl()....
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
static constexpr std::chrono::milliseconds GetParamsTimeoutDefault
Default timeout used by Object::GetParams() to lock the mutex of the parameter instance assigned to t...
ParamsTypeSyncPtrType GetNonConstParams(const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const
Allows derived Objects to edit their own parameters - even in const task functions (for instruments) ...
ObjectUserList UserList
List of Object instances making use of this Object instance. Other Object instances making use of thi...
bool IsReady() const
Returns wheter this Object instance is ready (e.g. it is running or connected to a hardware device) a...
bool IsBlocked
This flag indicates whether this Object instance is blocked in order to be destroyed subsequently....
void EnsureReadyState(bool IsAutomaticStartup)
Ensures that this Object instance is ready by possibly starting its worker thread or by opening conne...
std::exception_ptr GetException(const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const
Returns a pointer to the exception which has caused this Object instance to fail.
void DeregisterAllUnsafe()
Deregisters all users and notifies them that they need to check the states of their used linked objec...
bool IsSharedUsageEnabled(const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const
Returns whether shared usage has been enabled for this Object instance. Refer to ParamsBase::UsageTyp...
auto GetObjectName(const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const
Returns the name of this Object instance.
Util::SynchronizedPointer< ParamsType > ParamsTypeSyncPtrType
Alias for the return type of Object::GetParams(). Parameters wrapped into Util::SynchronizedPointer c...
static std::string CategoryAndNameToStr(const std::string &Category, const std::string &Name)
Builds a string from an Object's category and name to allow the user to identify an Object's type.
auto LockUserList(const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout)
Locks the user list for thread-safe manipulation.
void EnsureCallFromOwningThread() const
Asserts that the call to this function is performed from the thread which constructed this Object ins...
Refer to ParamsBase::dispatch_tag.
Makes sure the object link parameters of the associated ParamsBase instance are in a ready state by p...
bool operator()()
Performs the initialization stepwise. This functions is to be called as long as it returns true....
Abstract base class for a single object parameter. Parameters derived from this class are automatical...
ParamBase(ParamsBase &Owner, std::string ParamName, std::string_view ParamTitle, std::string_view ParamDescription, bool NeedsResetToApplyChange)
Base constructor of any parameter to be used if a parameter should be displayed in a settings dialog ...
void FromXMLNode(const QDomElement &XMLElement)
Restores this parameter's value from the given Qt dom element (describing an XML node)
bool Validate()
Checks whether a valid value is assigned to this parameter. This function is not const since it is al...
ParamsBase & Owner
Owner of this parameter. Owner always lives longer than this object.
QDomElement ToXMLNode(QDomDocument &Document) const
Converts this parameter to a Qt dom element (describing an XML node containing this parameter's name ...
Abstract base class for object parameter classes. Each class derived from class Object must be accomp...
virtual const char * GetParamClassTag() const noexcept
This function is intended to be overridden once in each derived class returning the name of the respe...
QDomElement ConfigToXML(QDomDocument &Document) const
Creates an XML node with a tag name as determined by GetParamClassTag() containing all parameters bel...
bool ConfigureUsageType() const noexcept
Determines whether the Usage parameter should be configurable in the settings dialog....
Param< UsageType > Usage
Determines whether an object can be used by only one other ("unique") or by multiple other ("shared")...
virtual void ConfigureParamsImpl(dispatch_tag< ParamsBase >)
Called by DynExp::ParamsBase::ConfigureParams() as a starting point for the tag dispatch mechanism to...
bool Validate() const
Refer to ParamBase::Validate().
void ConfigureParams()
Called by ConfigFromDialog() to apply changes to parameters owned by this parameter class instance be...
void ConfigFromXML(const QDomElement &XMLElement) const
Retrieves all parameters belonging to this ParamsBase instance from an XML node with a tag name as de...
OwnedParamsType OwnedParams
List of all parameters owned by this parameter class instance.
static void DisableUserEditable(ParamBase &Param) noexcept
Sets the UserEditable property of the parameter Param to false. Refer to ParamBase::UserEditable.
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
const auto & GetCore() const noexcept
Returns a reference to DynExp's core.
void ConfigFromDialog(ParamsConfigDialog &Dialog)
Adds all parameters belonging to this ParamsBase instance to a settings dialog to let the user config...
std::filesystem::path ToAbsolutePath(const std::filesystem::path &Path) const
Transforms the path Path into an absolute path relative to ProjectParams::ProjectFilename.
const DynExpCore & Core
Reference to DynExp's core.
static Util::TextValueListType< UsageType > AvlblUsageTypeStrList()
Maps description strings to the ParamsBase::UsageType enum's items.
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Defines data for a thread belonging to a RunnableObject instance. This data is only accessed by the R...
RunnableInstance(RunnableObject &Owner, std::promise< void > &&ThreadExitedPromise)
Constructs a non-empty RunnableInstance instance.
LinkedObjectWrapperBase::ListType OwnedLinkedObjectWrappers
List of all LinkedObjectWrapper instances owned by this RunnableInstance instance (thus belonging to ...
void SetThreadExited()
Signals that Owner's thread has exited. Refer to RunnableObject::OnThreadHasExited().
std::string GetNotReadyObjectNamesString() const
Finds all linked Object instances Owner makes use of which are not in a ready state and builds a stri...
bool CareAboutWrappers()
Unregisters owned LinkedObjectWrapper instances from their destiny resources in case of the respectiv...
const RunnableObject & Owner
RunnableObject instance which operates on this RunnableInstance (by its thread). The RunnableObject i...
bool Empty
Set to true if it was moved from this instance to indicate that ThreadExitedPromise has no shared sta...
std::promise< void > ThreadExitedPromise
Signals the RunnableObject instance owning the thread that its thread has terminated....
const auto & GetOwner() const noexcept
Returns Owner.
virtual ~RunnableObjectConfigurator()=0
static Util::TextValueListType< StartupType > AvlblStartupTypeStrList()
Maps description strings to the RunnableObjectParams::StartupType enum's items.
void ConfigureParamsImpl(dispatch_tag< ParamsBase >) override final
Called by DynExp::ParamsBase::ConfigureParams() as a starting point for the tag dispatch mechanism to...
virtual ~RunnableObjectParams()=0
Exception type thrown by TerminateImpl() if the RunnableObject cannot be terminated for being used by...
std::string GetErrorMessage() const
Genereates a user-readable error message containing the content of UserNames.
Defines an Object which possesses a thread it runs in. The RunnableObject can be started and stopped ...
std::atomic< bool > Running
Indicates whether the RunnableObject instance is running.
void ResetImpl(dispatch_tag< Object >) override final
Refer to DynExp::Object::Reset(). Using tag dispatch mechanism to ensure that ResetImpl() of every de...
bool IsCallFromRunnableThread() const
Checks whether Thread's id matches the id of the calling thread. This is thread-safe if the function ...
std::promise< void > MakeThreadExitedPromise()
Helper function to be used by overridden RunChild() functions in derived classes to (re)initialize th...
void Init()
Initializes member variables in case of a reset.
bool Run(QWidget *ParentWidget=nullptr)
Starts the RunnableObject instance's thread and ensures that all Object instances linked to this inst...
std::future< void > ThreadExitedSignal
Future which signals that Thread has terminated. Refer to OnThreadHasExited().
virtual void NotifyChild()
Notify derived classes that some state has changed (e.g. the termination of Thread is requested) and ...
virtual void RunChild()=0
Refer to Run().
virtual std::unique_ptr< BusyDialog > MakeStartupBusyDialogChild(QWidget *ParentWidget) const
Override to make this function return a pointer to a BusyDialog instance. Refer to Run().
RunnableObject(const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params)
Constructs an Object instance.
void TerminateUnsafe(bool Force, const std::chrono::milliseconds Timeout=TerminateTimeoutDefault)
Notifies the RunnableObject instance's thread to terminate and waits until it has ended....
virtual ~RunnableObject()=0
std::thread Thread
The RunnableObject instance's thread.
bool RunIfRunAutomatic()
Calls Run() if RunnableObjectParams::Startup is set to RunnableObjectParams::Automatic.
std::atomic< RunnableObjectParams::StartupType > Startup
Reflects the value of RunnableObjectParams::Startup. This variable is only updated when Run() is call...
void TerminateImpl(bool Force, const std::chrono::milliseconds Timeout=TerminateTimeoutDefault)
Notifies the RunnableObject instance's thread to terminate and waits until it has ended....
std::atomic< bool > Paused
Indicates whether the RunnableObject instance is paused.
std::atomic< bool > ShouldExit
Indicates whether this RunnableObject instance's thread should terminate.
void StoreThread(std::thread &&Thread) noexcept
Stores a thread constructed by a derived class overriding RunChild() in Thread taking ownership of th...
Util::Warning ReasonWhyPaused
Holds information about why the RunnableObject instance is paused.
void OnThreadHasExited() noexcept
This function is called when the RunnableObject instance's thread terminates. The thread receives a R...
std::atomic< bool > LinkedObjStateCheckRequested
Indicates whether the RunnableInstance instance belonging to this RunnableObject instance's thread sh...
void ClearReasonWhyPaused()
Removes the reason why this RunnableObject instance has been paused (since it is resumed).
void SetReasonWhyPaused(std::string Description)
Sets the reason why this RunnableObject instance has been paused.
void EnsureCallFromRunnableThread() const
Asserts that the call to this function is performed from the RunnableObject instance's thread by call...
void EnsureReadyStateChild(bool IsAutomaticStartup) override final
Ensures that this Object instance is ready by possibly starting its worker thread or by opening conne...
void SetPaused(bool Pause, std::string Description="")
Pauses or resumes a RunnableObject instance. Its thread stays running, but the instance does not perf...
bool IsRunning() const noexcept
Returns Running.
bool RunIfRunOnCreation()
Calls Run() if RunnableObjectParams::Startup is set to RunnableObjectParams::OnCreation.
void Terminate(bool Force=false, const std::chrono::milliseconds Timeout=TerminateTimeoutDefault)
Notifies the RunnableObject instance's thread to terminate and waits until it has ended....
virtual void TerminateChild(const std::chrono::milliseconds Timeout)
Signals derived classes that terminating the RunnableObject instance's thread is about to be requeste...
Defines the configuration dialog. The dialog must be displayed by calling ParamsConfigDialog::Display...
void Log(const std::string &Message, const ErrorType Type=ErrorType::Info, const size_t Line=0, const std::string &Function="", const std::string &File="", const int ErrorCode=0, const std::stacktrace &Trace={}) noexcept
Logs an event from information specified manually.
DynExp exceptions are derived from this class. It contains basic information about the cause of the e...
std::unique_lock< MutexType > LockType
An invalid argument like a null pointer has been passed to a function.
Thrown when a function call is not allowed to a specific thread in a multi-threading context.
An operation cannot be performed currently since the related object is in an invalid state like an er...
Thrown when some operation or feature is temporarily or permanently not available.
Thrown when a requested ressource does not exist.
Thrown when a numeric operation would result in an overflow (e.g. due to incompatible data types)
Pointer to lock a class derived from ISynchronizedPointerLockable for synchronizing between threads....
Thrown in a multi-threading context when an answer is expected from another thread an when the commun...
Thrown when an operation timed out before it could be completed, especially used for locking shared d...
Thrown when a numeric operation would result in an underflow (e.g. due to incompatible data types)
Class to store information about warnings in a thread-safe manner (deriving from ILockable)....
void Reset()
Clears the warning data.
DynExp's main namespace contains the implementation of DynExp including classes to manage resources (...
ParamsBasePtrType MakeParams(ItemIDType ID, const DynExpCore &Core)
Factory function to generate an Object's parameters.
std::vector< ItemIDType > ItemIDListType
Type of a list of IDs belonging to objects managed by DynExp.
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
size_t ItemIDType
ID type of objects/items managed by DynExp.
QDomElement GetSingleChildDOMElement(const QDomElement &Parent, const QString &ChildTagName)
Behaves like GetSingleChildDOMNode() but returns the node converted to a DOM element.
EventLogger & EventLog()
This function holds a static EventLogger instance and returns a reference to it. DynExp uses only one...
std::vector< std::pair< TextType, ValueType > > TextValueListType
Type of a list containing key-value pairs where key is a text of type Util::TextType.
Accumulates include statements to provide a precompiled header.
Return type of ConfiguratorBase::UpdateConfigFromDialog() indicating the result of the configurator d...