KSquare Utilities
KKB::Configuration Class Reference

General purpose Configuration File manager class. More...

#include <Configuration.h>

+ Inheritance diagram for KKB::Configuration:

Classes

class  ConfSection
 
class  ConfSectionList
 
class  Setting
 
class  SettingList
 

Public Member Functions

 Configuration (const KKB::KKStr &_fileName, RunLog &_log)
 
 Configuration ()
 
 Configuration (const Configuration &c)
 
virtual ~Configuration ()
 
const KKB::KKStrFileName () const
 
const VectorKKStrFormatErrors () const
 
void FormatErrorsAdd (kkint32 lineNum, const KKStr &error)
 
void FormatErrorsClear ()
 Call this to clear all format error messages. More...
 
const VectorIntFormatErrorsLineNums () const
 
VectorKKStr FormatErrorsWithLineNumbers () const
 
bool FormatGood () const
 
void FormatGood (bool _formatGood)
 
void GetSetting (const char *sectiopnName, kkint32 settingNum, KKStrConstPtr &name, KKStrConstPtr &value, kkint32 &lineNum)
 
virtual void Load (const KKB::KKStr &_fileName, RunLog &_log)
 
void LoadFile (RunLog &log)
 
virtual kkint32 MemoryConsumedEstimated () const
 
kkint32 NumOfSections ()
 
kkint32 NumOfSettings (const KKB::KKStr &sectionName) const
 
kkint32 NumOfSettings (kkint32 sectionNum) const
 Returns number of settings for the specified section,. More...
 
void PrintFormatErrors (std::ostream &o)
 
bool SectionDefined (const KKB::KKStr &sectionName) const
 Returns true if the section is defined. More...
 
kkint32 SectionLineNum (kkint32 sectionNum) const
 
KKStrConstPtr SectionName (kkint32 sectionNum) const
 Returns the name of the section for specified index, if index not defined will return NULL. More...
 
kkint32 SectionNum (const KKB::KKStr &sectionName) const
 
KKStrConstPtr SettingName (const KKB::KKStr &sectionName, kkint32 settingNum) const
 
KKStrConstPtr SettingName (kkint32 sectionNum, kkint32 settingNum) const
 
KKStrConstPtr SettingValue (const KKB::KKStr &sectionName, const KKB::KKStr &settingName, kkint32 &lineNum) const
 
KKStrConstPtr SettingValue (kkint32 sectionNum, const KKB::KKStr &settingName, kkint32 &lineNum) const
 
KKStrConstPtr SettingValue (kkint32 sectionNum, kkint32 settingNum, kkint32 &lineNum) const
 
KKStr SettingValueToStr (const KKB::KKStr &sectionName, const KKB::KKStr &settingName, kkint32 &lineNum) const
 
KKStr SettingValueToStr (kkint32 sectionNum, const KKB::KKStr &settingName, kkint32 &lineNum) const
 

Detailed Description

General purpose Configuration File manager class.

This class will read and write configuration files. It understands the concept of Logical Sections and Variables. You will be able to pragmatically define Sections and Settings in these sections. Each Setting will have a related value stored with it.

*Example Configuration File
===========================================================
[Header]
ClassifierType = SVM
Parameters = -K RBF -S SVC -G 1.76 -C 12
RootDir = ${LarcosHmeDir}\\Classifier\\TrainingLibraries\\
[Class]
Name = Shrimp_01
[Class]
Name = Shrimp_02
===========================================================

There are three sections defined in the example above; Header, Class, and Class. Note that Section names do not have to be unique. You can access sections by name or index. If the name is not unique the first instance will be returned. Index values start at the top of the file, that is the first section to appear in the file is section index 0. The Setting names are of the format "SettingName = Value". Again you will be able to access Setting by either name or index.

Definition at line 45 of file Configuration.h.

Constructor & Destructor Documentation

Configuration::Configuration ( const KKB::KKStr _fileName,
RunLog _log 
)

Definition at line 286 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::ConfSectionList(), KKB::KKStr::KKStr(), LoadFile(), and KKB::VectorKKStr::VectorKKStr().

288  :
289  curSectionName (),
290  fileName (_fileName),
291  formatGood (true),
292  formatErrors (),
293  formatErrorsLineNums (),
294  sections (NULL)
295 {
296  sections = new ConfSectionList ();
297  LoadFile (_log);
298 }
void LoadFile(RunLog &log)
Configuration::Configuration ( )

Definition at line 301 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::ConfSectionList(), KKB::KKStr::KKStr(), and KKB::VectorKKStr::VectorKKStr().

Referenced by KKMLL::TrainingConfiguration2::TrainingConfiguration2().

301  :
302  curSectionName (),
303  fileName (),
304  formatGood (true),
305  formatErrors (),
306  formatErrorsLineNums (),
307  sections (NULL)
308 {
309  sections = new ConfSectionList ();
310 }
Configuration::Configuration ( const Configuration c)

Definition at line 314 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::AddConfSection(), KKB::Configuration::ConfSection::ConfSection(), KKB::Configuration::ConfSectionList::ConfSectionList(), KKB::KKStr::KKStr(), and KKB::VectorKKStr::VectorKKStr().

314  :
315 
316  curSectionName (c.curSectionName),
317  fileName (c.fileName),
318  formatGood (c.formatGood),
319  formatErrors (c.formatErrors),
320  formatErrorsLineNums (c.formatErrorsLineNums),
321  sections (NULL)
322 {
323  sections = new ConfSectionList ();
324 
325  kkint32 x;
326 
327  for (x = 0; x < sections->QueueSize (); x++)
328  {
329  const ConfSectionPtr cs = sections->IdxToPtr (x);
330  sections->AddConfSection (new ConfSection (*cs));
331  }
332 }
__int32 kkint32
Definition: KKBaseTypes.h:88
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
void AddConfSection(ConfSectionPtr section)
kkint32 QueueSize() const
Definition: KKQueue.h:313
Configuration::~Configuration ( )
virtual

Definition at line 336 of file Configuration.cpp.

337 {
338  delete sections;
339 }

Member Function Documentation

const KKB::KKStr& KKB::Configuration::FileName ( ) const
inline

Definition at line 96 of file Configuration.h.

96 {return fileName;}
const VectorKKStr& KKB::Configuration::FormatErrors ( ) const
inline

Definition at line 68 of file Configuration.h.

68 {return formatErrors;}
void Configuration::FormatErrorsAdd ( kkint32  lineNum,
const KKStr error 
)

Definition at line 772 of file Configuration.cpp.

775 {
776  formatErrors.push_back (error);
777  formatErrorsLineNums.push_back (lineNum);
778 }
void Configuration::FormatErrorsClear ( )

Call this to clear all format error messages.

Definition at line 783 of file Configuration.cpp.

784 {
785  formatErrors.clear ();
786  formatErrorsLineNums.clear ();
787 }
const VectorInt& KKB::Configuration::FormatErrorsLineNums ( ) const
inline

Definition at line 69 of file Configuration.h.

69 {return formatErrorsLineNums;}
VectorKKStr Configuration::FormatErrorsWithLineNumbers ( ) const

Definition at line 791 of file Configuration.cpp.

References KKB::KKStr::Concat().

792 {
793  VectorKKStr errorMsgs;
794  for (kkuint32 i = 0; i < formatErrors.size (); i++)
795  {
796  KKStr lineNumStr = " ";
797  if (i < formatErrorsLineNums.size ())
798  lineNumStr = StrFormatInt (formatErrorsLineNums[i], "0000");
799  errorMsgs.push_back (lineNumStr + ":" + formatErrors[i]);
800  }
801 
802  return errorMsgs;
803 } /* FormatErrorsWithLineNumbers */
unsigned __int32 kkuint32
Definition: KKBaseTypes.h:89
KKStr StrFormatInt(kkint32 val, const char *mask)
Definition: KKStr.cpp:5004
bool KKB::Configuration::FormatGood ( ) const
inline

Definition at line 64 of file Configuration.h.

64 {return formatGood;}
void KKB::Configuration::FormatGood ( bool  _formatGood)
inline

Definition at line 66 of file Configuration.h.

Referenced by LoadFile().

66 {formatGood = _formatGood;}
void Configuration::GetSetting ( const char *  sectiopnName,
kkint32  settingNum,
KKStrConstPtr name,
KKStrConstPtr value,
kkint32 lineNum 
)

Definition at line 749 of file Configuration.cpp.

References KKB::Configuration::ConfSection::GetSettings(), and KKB::Configuration::ConfSectionList::LookUp().

755 {
756  ConfSectionPtr section = sections->LookUp (sectionName);
757  if (section)
758  {
759  section->GetSettings (settingNum, name, value, lineNum);
760  }
761  else
762  {
763  name = NULL;
764  value = NULL;
765  lineNum = -1;
766  }
767 }
void GetSettings(kkint32 settingNum, KKStrConstPtr &name, KKStrConstPtr &value, kkint32 &lineNum)
ConfSectionPtr LookUp(const KKStr &_name)
void Configuration::Load ( const KKB::KKStr _fileName,
RunLog _log 
)
virtual

Definition at line 401 of file Configuration.cpp.

References LoadFile(), and KKB::KKStr::operator=().

404 {
405  fileName = _fileName;
406  LoadFile (_log);
407 }
void LoadFile(RunLog &log)
void Configuration::LoadFile ( RunLog log)

Definition at line 411 of file Configuration.cpp.

References FormatGood(), KKB::KKStr::operator=(), KKB::KKStr::operator==(), KKB::osFOPEN(), and KKB::KKStr::Str().

Referenced by Configuration(), and Load().

412 {
413  log.Level (10) << "Configuration::LoadFile: " << fileName << endl;
414 
415  kkint32 lastLineNum = 0;
416 
417  if (fileName == "")
418  {
419  log.Level (-1) << endl
420  << "Configuration::LoadFile ***ERROR*** File-Name is blank" << endl
421  << endl;
422  FormatGood (false);
423  return;
424  }
425 
426  FILE* inFile = osFOPEN (fileName.Str (), "r");
427 
428  if (!inFile)
429  {
430  log.Level (-1) << endl
431  << "Configuration::LoadFile ***ERROR*** Opening File: " << fileName << endl
432  << endl;
433 
434  FormatGood (false);
435  return;
436  }
437 
438  char buff[10240];
439  kkint32 lineCount = 0;
440 
441  curSectionName = "";
442  ConfSectionPtr curSection = NULL;
443 
444  while (fgets (buff, sizeof (buff), inFile))
445  {
446  lastLineNum++;
447  KKStr line (buff);
448  line.TrimRight ();
449  line.TrimLeft ();
450 
451  StripOutAnyComments (line);
452 
453  log.Level (70) << line << endl;
454 
455  StripOutAnyComments (line);
456 
457  if (line.Empty ())
458  {
459  // If we have a blank line, we do nothing.
460  }
461 
462  else if (line.FirstChar () == '[')
463  {
464  // Looks like definition of new section.
465 
466  if (line.LastChar () == ']')
467  {
468  curSectionName = line.SubStrPart (1, line.Len () - 2);
469  curSectionName.TrimLeft ();
470  curSectionName.TrimRight ();
471  curSectionName.Upper ();
472 
473  curSection = new ConfSection (curSectionName, lastLineNum);
474  sections->AddConfSection (curSection);
475  log.Level (30) << "LoadFile SectionName[" << curSectionName << "]." << endl;
476  }
477  else
478  {
479  log.Level (-1) << endl
480  << "Configuration::LoadFile ***ERROR*** LineNumber[" << lastLineNum << "] Improper Section Name[" << line << "]." << endl
481  << endl;
482  formatGood = false;
483  }
484  }
485 
486  else
487  {
488  if (!curSection)
489  {
490  log.Level (-1) << endl
491  << "Configuration::LoadFile ***ERROR*** Format Error LineNumber[" << lastLineNum << "]" << endl
492  << " No Section Defined." << endl
493  << endl;
494 
495  formatGood = false;
496 
497  curSectionName = "GLOBAL";
498  curSection = new ConfSection (curSectionName, lastLineNum);
499  sections->AddConfSection (curSection);
500  }
501 
502  kkint32 equalIdx = line.LocateCharacter ('=');
503 
504  if (equalIdx < 0)
505  {
506  // We have a improperly formated line.
507  log.Level (-1) << endl
508  << "Configuration::LoadFile ***ERROR*** LineNumber[" << lastLineNum << "] Improperly Formated Line[" << line << "]."
509  << endl;
510  formatGood = false;
511  }
512 
513  else
514  {
515  KKStr settingName (line.SubStrPart (0, equalIdx - 1));
516  settingName.TrimLeft ();
517  settingName.TrimRight ();
518  settingName.Upper ();
519 
520  KKStr settingValue (line.SubStrPart (equalIdx + 1));
521  settingValue.TrimLeft ();
522  settingValue.TrimRight ();
523 
524  log.Level (30) << "LoadFile SectionName[" << curSectionName << "], "
525  << "Setting[" << settingName << "], Value[" << settingValue << "]."
526  << endl;
527 
528  curSection->AddSetting (settingName, settingValue, lastLineNum);
529  }
530 
531  lineCount++;
532  }
533  }
534 
535  fclose (inFile);
536 } /* LoadFile */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
__int32 kkint32
Definition: KKBaseTypes.h:88
KKStr & TrimRight(const char *whiteSpaceChars="\n\r\t ")
Definition: KKStr.cpp:1695
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
void AddConfSection(ConfSectionPtr section)
void TrimLeft(const char *whiteSpaceChars="\n\r\t ")
Definition: KKStr.cpp:1745
void Upper()
Converts all characters in string to their Upper case equivalents via &#39;toupper&#39;.
Definition: KKStr.cpp:2461
void StripOutAnyComments(KKStr &line)
bool FormatGood() const
Definition: Configuration.h:64
const char * Str() const
Returns a pointer to a ascii string.
Definition: KKStr.h:422
FILE * osFOPEN(const char *fileName, const char *mode)
Definition: OSservices.cpp:74
KKStr SubStrPart(kkint32 firstChar) const
returns a SubString consisting of all characters starting at index &#39;firstChar&#39; until the end of the s...
Definition: KKStr.cpp:2780
kkint32 Configuration::MemoryConsumedEstimated ( ) const
virtual

Definition at line 343 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::MemoryConsumedEstimated().

344 {
345  kkint32 memoryConsumedEstimated = sizeof (Configuration)
346  + curSectionName.MemoryConsumedEstimated ()
347  + fileName.MemoryConsumedEstimated ()
348  + (kkint32)formatErrors.size () * 100
349  + (kkint32)formatErrorsLineNums.size () * sizeof (kkint32);
350 
351  if (sections)
352  memoryConsumedEstimated += sections->MemoryConsumedEstimated ();
353 
354  return memoryConsumedEstimated;
355 } /* MemoryConsumedEstimated */
kkint32 MemoryConsumedEstimated() const
Definition: KKStr.cpp:766
__int32 kkint32
Definition: KKBaseTypes.h:88
kkint32 Configuration::NumOfSections ( )

Definition at line 541 of file Configuration.cpp.

542 {
543  return sections->QueueSize ();
544 }
kkint32 QueueSize() const
Definition: KKQueue.h:313
kkint32 Configuration::NumOfSettings ( const KKB::KKStr sectionName) const

Definition at line 548 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::LookUp(), and KKB::Configuration::ConfSection::NumOfSettings().

549 {
550  ConfSectionPtr section = sections->LookUp (sectionName);
551 
552  if (!section)
553  return (-1);
554 
555  return section->NumOfSettings ();
556 }
ConfSectionPtr LookUp(const KKStr &_name)
kkint32 Configuration::NumOfSettings ( kkint32  sectionNum) const

Returns number of settings for the specified section,.

Definition at line 561 of file Configuration.cpp.

562 {
563  if ((sectionNum < 0) || (sectionNum >= sections->QueueSize ()))
564  return -1;
565 
566  return sections->IdxToPtr (sectionNum) ->NumOfSettings ();
567 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
kkint32 QueueSize() const
Definition: KKQueue.h:313
void Configuration::PrintFormatErrors ( std::ostream &  o)

Definition at line 387 of file Configuration.cpp.

388 {
389  o << endl
390  << "Num" << "\t" << "LineNum" << "\t" << "Description" << endl;
391 
392  for (kkuint32 idx = 0; idx < formatErrors.size (); ++idx)
393  {
394  o << idx << "\t" << formatErrorsLineNums[idx] << "\t" << formatErrors[idx] << endl;
395  }
396 } /* PrintFormatErrors */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
unsigned __int32 kkuint32
Definition: KKBaseTypes.h:89
bool Configuration::SectionDefined ( const KKB::KKStr sectionName) const

Returns true if the section is defined.

Definition at line 574 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::LookUp().

575 {
576  ConfSectionPtr section = sections->LookUp (sectionName);
577  return (section != NULL);
578 }
ConfSectionPtr LookUp(const KKStr &_name)
kkint32 Configuration::SectionLineNum ( kkint32  sectionNum) const

Definition at line 610 of file Configuration.cpp.

References KKB::Configuration::ConfSection::LineNum().

611 {
612  ConfSectionPtr section = sections->IdxToPtr (sectionNum);
613 
614  if (!section)
615  return -1;
616  else
617  return section->LineNum ();
618 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
KKStrConstPtr Configuration::SectionName ( kkint32  sectionNum) const

Returns the name of the section for specified index, if index not defined will return NULL.

Definition at line 582 of file Configuration.cpp.

References KKB::Configuration::ConfSection::Name().

583 {
584  ConfSectionPtr section = sections->IdxToPtr (sectionNum);
585 
586  if (!section)
587  return NULL;
588  else
589  return section->Name ();
590 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
kkint32 Configuration::SectionNum ( const KKB::KKStr sectionName) const

Definition at line 593 of file Configuration.cpp.

Referenced by SettingValue(), and SettingValueToStr().

594 {
595  if (!sections)
596  return -1;
597 
598  kkuint32 idx = 0;
599  while (idx < sections->size ())
600  {
601  if (sections->IdxToPtr(idx)->Name ()->EqualIgnoreCase (sectionName))
602  return (kkint32)idx;
603  idx++;
604  }
605  return -1;
606 }
__int32 kkint32
Definition: KKBaseTypes.h:88
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
unsigned __int32 kkuint32
Definition: KKBaseTypes.h:89
KKStrConstPtr Configuration::SettingName ( const KKB::KKStr sectionName,
kkint32  settingNum 
) const

Definition at line 622 of file Configuration.cpp.

References KKB::Configuration::ConfSectionList::LookUp(), and KKB::Configuration::ConfSection::SettingName().

625 {
626  ConfSectionPtr section = sections->LookUp (sectionName);
627  if (!section)
628  return NULL;
629 
630  return section->SettingName (settingNum);
631 }
KKStrConstPtr SettingName(kkint32 settingNum) const
ConfSectionPtr LookUp(const KKStr &_name)
KKStrConstPtr Configuration::SettingName ( kkint32  sectionNum,
kkint32  settingNum 
) const

Definition at line 636 of file Configuration.cpp.

639 {
640  if ((sectionNum < 0) || (sectionNum >= sections->QueueSize ()))
641  return NULL;
642 
643  if ((settingNum < 0) || (settingNum >= (*sections)[sectionNum].NumOfSettings ()))
644  return NULL;
645 
646 
647  return sections->IdxToPtr (sectionNum)->SettingName (settingNum);
648 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
kkint32 QueueSize() const
Definition: KKQueue.h:313
KKStrConstPtr Configuration::SettingValue ( const KKB::KKStr sectionName,
const KKB::KKStr settingName,
kkint32 lineNum 
) const

Definition at line 719 of file Configuration.cpp.

References SectionNum(), and SettingValue().

723 {
724  kkint32 sectionNum = SectionNum (sectionName);
725  if (sectionNum < 0)
726  return NULL;
727 
728  return SettingValue (sectionNum, settingName, lineNum);
729 }
kkint32 SectionNum(const KKB::KKStr &sectionName) const
__int32 kkint32
Definition: KKBaseTypes.h:88
KKStrConstPtr SettingValue(const KKB::KKStr &sectionName, const KKB::KKStr &settingName, kkint32 &lineNum) const
KKStrConstPtr Configuration::SettingValue ( kkint32  sectionNum,
const KKB::KKStr settingName,
kkint32 lineNum 
) const

Definition at line 652 of file Configuration.cpp.

References KKB::Configuration::ConfSection::LookUpValue().

Referenced by SettingValue().

657 {
658  KKStrConstPtr result = NULL;
659  ConfSectionPtr section = sections->IdxToPtr (sectionNum);
660  if (!section)
661  {
662  lineNum = -1;
663  }
664  else
665  {
666  result = section->LookUpValue (settingName, lineNum);
667  }
668  return result;
669 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
KKStrConstPtr Configuration::SettingValue ( kkint32  sectionNum,
kkint32  settingNum,
kkint32 lineNum 
) const

Definition at line 701 of file Configuration.cpp.

705 {
706  if ((sectionNum < 0) || (sectionNum >= sections->QueueSize ()))
707  return NULL;
708 
709  if ((settingNum < 0) || (settingNum >= (*sections)[sectionNum].NumOfSettings ()))
710  return NULL;
711 
712 
713  return sections->IdxToPtr (sectionNum)->SettingValue (settingNum, lineNum);
714 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
kkint32 QueueSize() const
Definition: KKQueue.h:313
KKStr Configuration::SettingValueToStr ( const KKB::KKStr sectionName,
const KKB::KKStr settingName,
kkint32 lineNum 
) const

Definition at line 733 of file Configuration.cpp.

References SectionNum(), and SettingValueToStr().

737 {
738  kkint32 sectionNum = SectionNum (sectionName);
739  if (sectionNum < 0)
740  return NULL;
741 
742  return SettingValueToStr (sectionNum, settingName, lineNum);
743 }
kkint32 SectionNum(const KKB::KKStr &sectionName) const
__int32 kkint32
Definition: KKBaseTypes.h:88
KKStr SettingValueToStr(const KKB::KKStr &sectionName, const KKB::KKStr &settingName, kkint32 &lineNum) const
KKStr Configuration::SettingValueToStr ( kkint32  sectionNum,
const KKB::KKStr settingName,
kkint32 lineNum 
) const

Definition at line 672 of file Configuration.cpp.

References KKB::KKStr::Concat(), KKB::KKStr::EmptyStr(), KKB::KKStr::KKStr(), and KKB::Configuration::ConfSection::LookUpValue().

Referenced by SettingValueToStr().

677 {
678  KKStrConstPtr result = NULL;
679  ConfSectionPtr section = sections->IdxToPtr (sectionNum);
680  if (!section)
681  {
682  lineNum = -1;
683  }
684  else
685  {
686  result = section->LookUpValue (settingName, lineNum);
687  }
688 
689  if (result == NULL)
690  return KKStr::EmptyStr ();
691  else
692  return KKStr (*result);
693 }
EntryPtr IdxToPtr(kkuint32 idx) const
Definition: KKQueue.h:732
static const KKStr & EmptyStr()
Static method that returns an Empty String.
Definition: KKStr.cpp:3453

The documentation for this class was generated from the following files: