Back to index

CCalibrationDictionary.C

 
//----------------------------------------------------------------------------- 
//  $Header: /nfs/ceres1/asis/offline/ceres/cool/project/RCS/CCalibrationDictionary.C,v 2.2 1997/01/20 20:38:48 voigt Exp $ 
// 
//  COOL Program Library   
//  Copyright (C) CERES collaboration, 1996 
// 
//  Implementation of class CCalibrationDictionary. 
// 
//----------------------------------------------------------------------------- 
#include "CCalibrationDictionary.h"  
#include "CDataStream.h" 
 
unsigned calibrationConstantsHashFunction(const CString& str) 
{ 
   return str.hash(); 
} 
 
CCalibrationDictionary::CCalibrationDictionary()  
{ 
   dictionary = new RWTValHashDictionary<CString, double>(calibrationConstantsHashFunction); 
} 
 
CCalibrationDictionary::~CCalibrationDictionary()  
{ 
   delete dictionary;  
} 
    
void CCalibrationDictionary::add(const CString& key, double val)  
{ 
   dictionary->insertKeyAndValue(key, val);  
} 
 
double CCalibrationDictionary::lookup(const CString& key)  
{  
   double val; 
   if (dictionary->findValue(key, val))  
      return val; 
   else 
      return 0; 
}   
 
CBoolean CCalibrationDictionary::isEmpty()  
{ 
   return dictionary->isEmpty(); 
}   
 
CBoolean CCalibrationDictionary::contains(const CString& key)  
{ 
   return dictionary->contains(key); 
} 
 
size_t CCalibrationDictionary::entries()  
{ 
   return dictionary->entries(); 
} 
 
void CCalibrationDictionary::clear() 
{ 
   dictionary->clear(); 
} 
 
void CCalibrationDictionary::remove(const CString& key) 
{ 
   dictionary->remove(key); 
}   
 
CBoolean CCalibrationDictionary::writeContentToFile(const char* fileName) 
{ 
   if (dictionary->isEmpty()) return True;	   // nothing to do 
   // 
   //  Open output stream 
   // 
   Cofstream ofs(fileName); 
   // 
   //  Check status 
   // 
   if (!ofs) { 
      cerr << "CCalibrationDictionary::writeContentToFile():\n"; 
      cerr << "\tERROR\n"; 
      cerr << "\tFailed to open file '" << fileName << "'.\n"; 
      cerr << "\tofs.rdstate()=" << dec << ofs.rdstate() << endl; 
      cerr << "\tNo valid ouput source connected to dictionary.\n"; 
      return False; 
   } 
   RWTValHashDictionaryIterator<CString, double> iterator(*dictionary); 
   iterator.reset(*dictionary);                     // get valid starting point   
   // 
   //  Write all key/ value pairs in the dictionary 
   // 
   ofs.precision(18);  // otherwise we do not get the necessary precision   
 
   while (iterator())  
      ofs << iterator.key() << ' ' << iterator.value() << endl; 
 
   return True; 
} 
 
CBoolean CCalibrationDictionary::readContentFromFile(const char* fileName) 
{ 
   // 
   //  Open output stream 
   // 
   Cifstream ifs(fileName); 
 
   // 
   //  Check status 
   // 
   if (!ifs) { 
      cerr << "CCalibrationDictionary::readContentFromFile():\n"; 
      cerr << "\tERROR\n"; 
      cerr << "\tFailed to open file '" << fileName << "'.\n"; 
      cerr << "\tifs.rdstate()=" << dec << ifs.rdstate() << endl; 
      cerr << "\tNo valid input source connected to dictionary.\n"; 
      return False; 
   } 
   //  
   //  First clear the whole dictionary to avoid any trouble with 
   //  with double tags, then 
   //  write all key / value pairs into the dictionary 
   // 
   dictionary->clear();  
   CString key; 
   double value; 
   while (ifs >> key >> value, !ifs.eof() && ifs.good())  
     dictionary->insertKeyAndValue(key,value); 
 
   return True; 
} 
 
 
 
 
 
 
 
 
 
 
 

Back to index