Listing 3: VersionStamp and BuildConfiguration implementation highlights

// A partial listing of BuildConfig.cpp

VersionStamp::VersionStamp(const char* file,
                           const char* date,
                           const char* time,
                           const char* ver)
  : mFileName(file), mBuildDate(date)
  , mBuildTime(time), mVersion(ver)
{
  BuildConfiguration::Instance().AddFile(this);
}

bool VersionStamp::operator<(const VersionStamp& rhs) const
{
  return strcmp(mFileName, rhs.mFileName) < 0;
}

bool VersionStampPtrLess::operator ()(const VersionStamp* lhs,
                                      const VersionStamp* rhs)
{
  return (*lhs) < (*rhs);
}

BuildConfiguration& BuildConfiguration::Instance()
{
  static std::auto_ptr<BuildConfiguration>
    instance(new BuildConfiguration);

  return *instance;
}

void BuildConfiguration::AddFile(const VersionStamp* fileStamp)
{
  assert(fileStamp);
  mConfig.insert(fileStamp);
}

— End of Listing —