Просмотр исходного кода

Explicitly flag empty strings to differentiate from cache misses

The cachedTag method was returning an empty string to indicated a
cache miss, but it can also be the case that the value of the
cached tag can be an empty string (happens as a byproduct of
anonymization sometimes).  There is now an explicit flag so
that users of this method can differentiate the cases.  In particular
the fileValue and instanceValue methods can avoid re-loading the original
dataset.
Steve Pieper лет назад: 12
Родитель
Сommit
3185e8f777
1 измененных файлов с 11 добавлено и 4 удалено
  1. 11 4
      Libs/DICOM/Core/ctkDICOMDatabase.cpp

+ 11 - 4
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -63,6 +63,9 @@ static ctkLogger logger("org.commontk.dicom.DICOMDatabase" );
 // Flag for tag cache to avoid repeated serarches for
 // tags that do no exist.
 static QString TagNotInInstance("__TAG_NOT_IN_INSTANCE__");
+// Flag for tag cache indicating that the value
+// really is the empty string
+static QString ValueIsEmptyString("__VALUE_IS_EMPTY_STRING__");
 
 //------------------------------------------------------------------------------
 class ctkDICOMDatabasePrivate
@@ -725,7 +728,7 @@ QString ctkDICOMDatabase::headerValue (QString key)
 QString ctkDICOMDatabase::instanceValue(QString sopInstanceUID, QString tag)
 {
   QString value = this->cachedTag(sopInstanceUID, tag);
-  if (value == TagNotInInstance)
+  if (value == TagNotInInstance || value == ValueIsEmptyString)
     {
     return "";
     }
@@ -743,7 +746,7 @@ QString ctkDICOMDatabase::instanceValue(const QString sopInstanceUID, const unsi
 {
   QString tag = this->groupElementToTag(group,element);
   QString value = this->cachedTag(sopInstanceUID, tag);
-  if (value == TagNotInInstance)
+  if (value == TagNotInInstance || value == ValueIsEmptyString)
     {
     return "";
     }
@@ -771,7 +774,7 @@ QString ctkDICOMDatabase::fileValue(const QString fileName, QString tag)
   this->tagToGroupElement(tag, group, element);
   QString sopInstanceUID = this->instanceForFile(fileName);
   QString value = this->cachedTag(sopInstanceUID, tag);
-  if (value == TagNotInInstance)
+  if (value == TagNotInInstance || value == ValueIsEmptyString)
     {
     return "";
     }
@@ -801,7 +804,7 @@ QString ctkDICOMDatabase::fileValue(const QString fileName, const unsigned short
   QString tag = this->groupElementToTag(group, element);
   QString sopInstanceUID = this->instanceForFile(fileName);
   QString value = this->cachedTag(sopInstanceUID, tag);
-  if (value == TagNotInInstance)
+  if (value == TagNotInInstance || value == ValueIsEmptyString)
     {
     return "";
     }
@@ -1570,6 +1573,10 @@ QString ctkDICOMDatabase::cachedTag(const QString sopInstanceUID, const QString
   if (selectValue.next())
     {
     result = selectValue.value(0).toString();
+    if (result == QString(""))
+      {
+      result = ValueIsEmptyString;
+      }
     }
   return( result );
 }