Refactor getDOM to use a pointer for the optional context

It's possible to call getDOM without a contextual task.  Previously,
this was done by referencing a "dummy" task which necessitated a way to
distinguish such dummy tasks.  This switches to using a pointer and
treating the NULL value as meaning there is no context.

Note that this cannot use `std::optional<&Task>`, as optional does not
support reference types.
This commit is contained in:
Dustin J. Mitchell 2021-11-18 02:48:14 +00:00 committed by Tomas Babej
parent 3af5ceadc1
commit 2812a8c77a
11 changed files with 76 additions and 82 deletions

View file

@ -36,7 +36,7 @@
#include <utf8.h>
#include <util.h>
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnProject::ColumnProject ()
@ -121,7 +121,7 @@ void ColumnProject::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
Variant v;
e.evaluateInfixExpression (value, v);

View file

@ -36,7 +36,7 @@
#include <format.h>
#include <utf8.h>
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnRecur::ColumnRecur ()
@ -108,7 +108,7 @@ void ColumnRecur::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
e.evaluateInfixExpression (value, evaluatedValue);
}

View file

@ -36,7 +36,7 @@
#include <utf8.h>
#include <main.h>
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnTags::ColumnTags ()
@ -162,7 +162,7 @@ void ColumnTags::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
Variant v;
e.evaluateInfixExpression (value, v);

View file

@ -34,7 +34,7 @@
#include <Filter.h>
#include <format.h>
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnTypeDate::ColumnTypeDate ()
@ -213,7 +213,7 @@ void ColumnTypeDate::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
e.evaluateInfixExpression (value, evaluatedValue);
}

View file

@ -32,7 +32,7 @@
#include <Filter.h>
#include <format.h>
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnTypeDuration::ColumnTypeDuration ()
@ -55,7 +55,7 @@ void ColumnTypeDuration::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
e.evaluateInfixExpression (value, evaluatedValue);
}

View file

@ -32,7 +32,7 @@
#include <Filter.h>
#include <format.h>
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnTypeNumeric::ColumnTypeNumeric ()
@ -55,7 +55,7 @@ void ColumnTypeNumeric::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
e.evaluateInfixExpression (value, evaluatedValue);
}

View file

@ -34,7 +34,7 @@
#define STRING_INVALID_MOD "The '{1}' attribute does not allow a value of '{2}'."
extern Task& contextTask;
extern Task* contextTask;
////////////////////////////////////////////////////////////////////////////////
ColumnTypeString::ColumnTypeString ()
@ -67,7 +67,7 @@ void ColumnTypeString::modify (Task& task, const std::string& value)
{
Eval e;
e.addSource (domSource);
contextTask = task;
contextTask = &task;
Variant v;
e.evaluateInfixExpression (value, v);