SourceXtractorPlusPlus
0.15
Please provide a description of the project.
SEFramework
src
lib
Source
SourceWithOnDemandProperties.cpp
Go to the documentation of this file.
1
23
#include "
SEFramework/Task/TaskProvider.h
"
24
#include "
SEFramework/Task/SourceTask.h
"
25
#include "
SEFramework/Property/PropertyNotFoundException.h
"
26
27
#include "
SEFramework/Source/SourceWithOnDemandProperties.h
"
28
29
namespace
SourceXtractor
{
30
31
SourceWithOnDemandProperties::SourceWithOnDemandProperties
(
std::shared_ptr<const TaskProvider>
task_provider) :
32
m_task_provider(task_provider) {
33
}
34
35
const
Property
&
SourceWithOnDemandProperties::getProperty
(
const
PropertyId
& property_id)
const
{
36
// if we have the property already, just return it
37
if
(
m_property_holder
.
isPropertySet
(property_id)) {
38
return
m_property_holder
.
getProperty
(property_id);
39
}
40
41
// if not, get the task that makes it and execute, we should have it then
42
auto
task =
m_task_provider
->getTask<
SourceTask
>(property_id);
43
if
(task) {
44
task->
computeProperties
(
const_cast<
SourceWithOnDemandProperties
&
>
(*
this
));
45
return
m_property_holder
.
getProperty
(property_id);
46
}
47
48
// no task available to make the property, just throw an exception
49
throw
PropertyNotFoundException
(property_id);
50
}
51
52
void
SourceWithOnDemandProperties::setProperty
(
std::unique_ptr<Property>
property,
const
PropertyId
& property_id) {
53
// just forward to the ObjectWithProperties implementation
54
m_property_holder
.
setProperty
(
std::move
(property), property_id);
55
}
56
57
58
}
// SEFramework namespace
59
PropertyNotFoundException.h
SourceTask.h
SourceWithOnDemandProperties.h
TaskProvider.h
SourceXtractor::PropertyHolder::isPropertySet
bool isPropertySet(const PropertyId &property_id) const
Returns true if the property is set.
Definition:
PropertyHolder.cpp:44
SourceXtractor::PropertyHolder::getProperty
const Property & getProperty(const PropertyId &property_id) const
Returns a reference to a Property if it is set, if not throws a PropertyNotFoundException.
Definition:
PropertyHolder.cpp:29
SourceXtractor::PropertyHolder::setProperty
void setProperty(std::unique_ptr< Property > property, const PropertyId &property_id)
Sets a property, overwriting it if necessary.
Definition:
PropertyHolder.cpp:40
SourceXtractor::PropertyId
Identifier used to set and retrieve properties.
Definition:
PropertyId.h:40
SourceXtractor::PropertyNotFoundException
An exception indicating that a Property was not available and could not be computed on demand.
Definition:
PropertyNotFoundException.h:36
SourceXtractor::Property
Base class for all Properties. (has no actual content)
Definition:
Property.h:33
SourceXtractor::SourceTask
A Task that acts on a Source to compute one or more properties.
Definition:
SourceTask.h:36
SourceXtractor::SourceTask::computeProperties
virtual void computeProperties(SourceInterface &source) const =0
Computes one or more properties for the Source.
SourceXtractor::SourceWithOnDemandProperties
Definition:
SourceWithOnDemandProperties.h:43
SourceXtractor::SourceWithOnDemandProperties::m_task_provider
std::shared_ptr< const TaskProvider > m_task_provider
Definition:
SourceWithOnDemandProperties.h:76
SourceXtractor::SourceWithOnDemandProperties::m_property_holder
PropertyHolder m_property_holder
Definition:
SourceWithOnDemandProperties.h:77
SourceXtractor::SourceWithOnDemandProperties::SourceWithOnDemandProperties
SourceWithOnDemandProperties(const SourceWithOnDemandProperties &)=delete
SourceXtractor::SourceWithOnDemandProperties::setProperty
virtual void setProperty(std::unique_ptr< Property > property, const PropertyId &property_id)=0
SourceXtractor::SourceWithOnDemandProperties::getProperty
virtual const Property & getProperty(const PropertyId &property_id) const=0
std::move
T move(T... args)
SourceXtractor
Definition:
Aperture.h:30
std::shared_ptr
std::unique_ptr
Generated by
1.9.1