⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.cxx

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 CXX
📖 第 1 页 / 共 2 页
字号:
                       PFilePath & readFilename,                       PFilePath & filename){  PFilePath userFile;  // check the user's home directory first  filename = readFilename = PProcess::Current().PXGetHomeDir() +             APP_CONFIG_DIR + baseName + EXTENSION;  if (PFile::Exists(filename))    return TRUE;  // otherwise check the system directory for a file to read,  // and then create   readFilename = SYS_CONFIG_DIR + baseName + EXTENSION;  return PFile::Exists(readFilename);}//////////////////////////////////////////////////////////////// PXConfigDictionary//PXConfigDictionary::PXConfigDictionary(int){  environmentInstance = NULL;  writeThread = NULL;  configDict = this;}PXConfigDictionary::~PXConfigDictionary(){  if (writeThread != NULL) {    stopConfigWriteThread.Signal();    writeThread->WaitForTermination();    delete writeThread;  }  delete environmentInstance;}PXConfig * PXConfigDictionary::GetEnvironmentInstance(){  mutex.Wait();  if (environmentInstance == NULL) {    environmentInstance = new PXConfig(0);    environmentInstance->ReadFromEnvironment(PProcess::Current().PXGetEnvp());  }  mutex.Signal();  return environmentInstance;}PXConfig * PXConfigDictionary::GetFileConfigInstance(const PFilePath & key, const PFilePath & readKey){  mutex.Wait();  // start write thread, if not already started  if (writeThread == NULL)    writeThread = new PXConfigWriteThread(stopConfigWriteThread);  PXConfig * config = GetAt(key);  if (config != NULL)     config->AddInstance();  else {    config = new PXConfig(0);    config->ReadFromFile(readKey);    config->AddInstance();    SetAt(key, config);  }  mutex.Signal();  return config;}void PXConfigDictionary::RemoveInstance(PXConfig * instance){  mutex.Wait();  if (instance != environmentInstance) {    PINDEX index = GetObjectsIndex(instance);    PAssert(index != P_MAX_INDEX, "Cannot find PXConfig instance to remove");    // decrement the instance count, but don't remove it yet    PFilePath key = GetKeyAt(index);    instance->RemoveInstance(key);  }  mutex.Signal();}void PXConfigDictionary::WriteChangedInstances(BOOL force){  mutex.Wait();  PINDEX i;  for (i = 0; i < GetSize(); i++) {    PFilePath key = GetKeyAt(i);    GetAt(key)->Flush(key, force);  }  mutex.Signal();}//////////////////////////////////////////////////////////////// PConfig:://// Create a new configuration object//////////////////////////////////////////////////////////////void PConfig::Construct(Source src,                        const PString & appname,                        const PString & /*manuf*/){  PString name;  PFilePath filename, readFilename;  // handle cnvironment configs differently  if (src == PConfig::Environment)     config = configDict->GetEnvironmentInstance();  // look up file name to read, and write  if (src == PConfig::System)    LocateFile(SYS_CONFIG_NAME, readFilename, filename);  else {    if (appname.IsEmpty())      name = PProcess::Current().GetName();    else      name = appname;    if (!LocateFile(name, readFilename, filename)) {      name = PProcess::Current().GetFile().GetTitle();      LocateFile(name, readFilename, filename);    }  }  // get, or create, the configuration  config = configDict->GetFileConfigInstance(filename, readFilename);}PConfig::PConfig(int, const PString & name)  : defaultSection("Options"){  PFilePath readFilename, filename;  LocateFile(name, readFilename, filename);  config = configDict->GetFileConfigInstance(filename, readFilename);}void PConfig::Construct(const PFilePath & theFilename){  PFilePath filename;  config = configDict->GetFileConfigInstance(filename, theFilename);}PConfig::~PConfig(){  configDict->RemoveInstance(config);}//////////////////////////////////////////////////////////////// PConfig:://// Return a list of all the section names in the file.//////////////////////////////////////////////////////////////PStringList PConfig::GetSections() const{  PAssert(config != NULL, "config instance not set");  config->Wait();  PStringList list;  for (PINDEX i = 0; i < (*config).GetSize(); i++)    list.AppendString((*config)[i]);  config->Signal();  return list;}//////////////////////////////////////////////////////////////// PConfig:://// Return a list of all the keys in the section. If the section name is// not specified then use the default section.//////////////////////////////////////////////////////////////PStringList PConfig::GetKeys(const PString & theSection) const{  PAssert(config != NULL, "config instance not set");  config->Wait();  PINDEX index;  PStringList list;  if ((index = config->GetValuesIndex(theSection)) != P_MAX_INDEX) {    PXConfigSectionList & section = (*config)[index].GetList();    for (PINDEX i = 0; i < section.GetSize(); i++)      list.AppendString(section[i]);  }  config->Signal();  return list;}//////////////////////////////////////////////////////////////// PConfig:://// Delete all variables in the specified section. If the section name is// not specified then use the default section.//////////////////////////////////////////////////////////////void PConfig::DeleteSection(const PString & theSection){  PAssert(config != NULL, "config instance not set");  config->Wait();  PStringList list;  PINDEX index;  if ((index = config->GetValuesIndex(theSection)) != P_MAX_INDEX) {    config->RemoveAt(index);    config->SetDirty();  }  config->Signal();}//////////////////////////////////////////////////////////////// PConfig:://// Delete the particular variable in the specified section.//////////////////////////////////////////////////////////////void PConfig::DeleteKey(const PString & theSection, const PString & theKey){  PAssert(config != NULL, "config instance not set");  config->Wait();  PINDEX index;  if ((index = config->GetValuesIndex(theSection)) != P_MAX_INDEX) {    PXConfigSectionList & section = (*config)[index].GetList();    PINDEX index_2;    if ((index_2 = section.GetValuesIndex(theKey)) != P_MAX_INDEX) {      section.RemoveAt(index_2);      config->SetDirty();    }  }  config->Signal();}//////////////////////////////////////////////////////////////// PConfig:://// Test if there is a value for the key.//////////////////////////////////////////////////////////////BOOL PConfig::HasKey(const PString & theSection, const PString & theKey) const{  PAssert(config != NULL, "config instance not set");  config->Wait();  BOOL present = FALSE;  PINDEX index;  if ((index = config->GetValuesIndex(theSection)) != P_MAX_INDEX) {    PXConfigSectionList & section = (*config)[index].GetList();    present = section.GetValuesIndex(theKey) != P_MAX_INDEX;  }  config->Signal();  return present;}//////////////////////////////////////////////////////////////// PConfig:://// Get a string variable determined by the key in the section.//////////////////////////////////////////////////////////////PString PConfig::GetString(const PString & theSection,                                    const PString & theKey, const PString & dflt) const{  PAssert(config != NULL, "config instance not set");  config->Wait();  PString value = dflt;  PINDEX index;  if ((index = config->GetValuesIndex(theSection)) != P_MAX_INDEX) {    PXConfigSectionList & section = (*config)[index].GetList();    if ((index = section.GetValuesIndex(theKey)) != P_MAX_INDEX)       value = section[index].GetValue();  }  config->Signal();  return value;}//////////////////////////////////////////////////////////////// PConfig:://// Set a string variable determined by the key in the section.//////////////////////////////////////////////////////////////void PConfig::SetString(const PString & theSection,                        const PString & theKey,                        const PString & theValue){  PAssert(config != NULL, "config instance not set");  config->Wait();  PINDEX index;  PXConfigSection * section;  PXConfigValue   * value;  if ((index = config->GetValuesIndex(theSection)) != P_MAX_INDEX)     section = &(*config)[index];  else {    section = new PXConfigSection(theSection);    config->Append(section);    config->SetDirty();  }   if ((index = section->GetList().GetValuesIndex(theKey)) != P_MAX_INDEX)     value = &(section->GetList()[index]);  else {    value = new PXConfigValue(theKey);    section->GetList().Append(value);    config->SetDirty();  }  if (theValue != value->GetValue()) {    value->SetValue(theValue);    config->SetDirty();  }  config->Signal();}///////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -