Validator: add simple Result caching

This commit is contained in:
Bruno Martins
2019-05-29 14:22:47 -04:00
committed by mdavidsaver
parent e0d422ffd9
commit 31050952b6
18 changed files with 218 additions and 88 deletions

View File

@@ -39,12 +39,6 @@ Result& NTField::isEnumerated(Result& result)
.has<ScalarArray>("choices");
}
bool NTField::isEnumerated(FieldConstPtr const & field)
{
Result result(field);
return isEnumerated(result.is<Structure>()).valid();
}
Result& NTField::isTimeStamp(Result& result)
{
return result
@@ -53,12 +47,6 @@ Result& NTField::isTimeStamp(Result& result)
.has<Scalar>("userTag");
}
bool NTField::isTimeStamp(FieldConstPtr const & field)
{
Result result(field);
return isTimeStamp(result.is<Structure>()).valid();
}
Result& NTField::isAlarm(Result& result)
{
return result
@@ -67,12 +55,6 @@ Result& NTField::isAlarm(Result& result)
.has<Scalar>("message");
}
bool NTField::isAlarm(FieldConstPtr const & field)
{
Result result(field);
return isAlarm(result.is<Structure>()).valid();
}
Result& NTField::isDisplay(Result& result)
{
return result
@@ -81,13 +63,6 @@ Result& NTField::isDisplay(Result& result)
.has<Scalar>("description")
.has<Scalar>("format")
.has<Scalar>("units");
}
bool NTField::isDisplay(FieldConstPtr const & field)
{
Result result(field);
return isDisplay(result.is<Structure>()).valid();
}
Result& NTField::isAlarmLimit(Result& result)
@@ -105,12 +80,6 @@ Result& NTField::isAlarmLimit(Result& result)
.has<Scalar>("hysteresis");
}
bool NTField::isAlarmLimit(FieldConstPtr const & field)
{
Result result(field);
return isAlarmLimit(result.is<Structure>()).valid();
}
Result& NTField::isControl(Result& result)
{
return result
@@ -119,11 +88,24 @@ Result& NTField::isControl(Result& result)
.has<Scalar>("minStep");
}
bool NTField::isControl(FieldConstPtr const & field)
{
Result result(field);
return isControl(result.is<Structure>()).valid();
}
#define IS_NTFIELD_FUNC(name) \
static epicsThreadOnceId cached##name##OnceId = EPICS_THREAD_ONCE_INIT; \
static epicsThreadPrivateId cached##name##Id; \
bool NTField::is##name(FieldConstPtr const & field) { \
Result& result = Result::fromCache(&cached##name##OnceId, \
&cached##name##Id); \
if (result.wraps(field)) return result.valid(); \
return is##name(result.reset(field).is<Structure>()).valid(); \
}
IS_NTFIELD_FUNC(Enumerated)
IS_NTFIELD_FUNC(TimeStamp)
IS_NTFIELD_FUNC(Alarm)
IS_NTFIELD_FUNC(Display)
IS_NTFIELD_FUNC(AlarmLimit)
IS_NTFIELD_FUNC(Control)
#undef IS_NTFIELD_FUNC
StructureConstPtr NTField::createEnumerated()
{