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

@@ -232,14 +232,20 @@ bool NTMultiChannel::is_a(PVStructurePtr const & pvStructure)
return is_a(pvStructure->getStructure());
}
static epicsThreadOnceId cachedResultOnceId = EPICS_THREAD_ONCE_INIT;
static epicsThreadPrivateId cachedResultId;
bool NTMultiChannel::isCompatible(StructureConstPtr const & structure)
{
if (!structure)
return false;
Result result(structure);
Result& result = Result::fromCache(&cachedResultOnceId, &cachedResultId);
return result
if (result.wraps(structure))
return result.valid();
return result.reset(structure)
.is<Structure>()
.has<UnionArray>("value")
.has<ScalarArray>("channelName")