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;
}