Audacity  3.0.3
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
FileConfig Class Referenceabstract

#include <FileConfig.h>

Inheritance diagram for FileConfig:
[legend]
Collaboration diagram for FileConfig:
[legend]

Public Member Functions

 FileConfig (const wxString &appName=wxEmptyString, const wxString &vendorName=wxEmptyString, const wxString &localFilename=wxEmptyString, const wxString &globalFilename=wxEmptyString, long style=wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_GLOBAL_FILE, const wxMBConv &conv=wxConvAuto())
 
void Init ()
 
virtual ~FileConfig ()
 
virtual void SetPath (const wxString &strPath) wxOVERRIDE
 
virtual const wxString & GetPath () const wxOVERRIDE
 
virtual bool GetFirstGroup (wxString &str, long &lIndex) const wxOVERRIDE
 
virtual bool GetNextGroup (wxString &str, long &lIndex) const wxOVERRIDE
 
virtual bool GetFirstEntry (wxString &str, long &lIndex) const wxOVERRIDE
 
virtual bool GetNextEntry (wxString &str, long &lIndex) const wxOVERRIDE
 
virtual size_t GetNumberOfEntries (bool bRecursive=false) const wxOVERRIDE
 
virtual size_t GetNumberOfGroups (bool bRecursive=false) const wxOVERRIDE
 
virtual bool HasGroup (const wxString &strName) const wxOVERRIDE
 
virtual bool HasEntry (const wxString &strName) const wxOVERRIDE
 
virtual bool Flush (bool bCurrentOnly=false) wxOVERRIDE
 
virtual bool RenameEntry (const wxString &oldName, const wxString &newName) wxOVERRIDE
 
virtual bool RenameGroup (const wxString &oldName, const wxString &newName) wxOVERRIDE
 
virtual bool DeleteEntry (const wxString &key, bool bDeleteGroupIfEmpty=true) wxOVERRIDE
 
virtual bool DeleteGroup (const wxString &key) wxOVERRIDE
 
virtual bool DeleteAll () wxOVERRIDE
 
void SetVersionKeysInit (int major, int minor, int micro)
 
void GetVersionKeysInit (int &major, int &minor, int &micro) const
 

Protected Member Functions

virtual bool DoReadString (const wxString &key, wxString *pStr) const wxOVERRIDE
 
virtual bool DoReadLong (const wxString &key, long *pl) const wxOVERRIDE
 
virtual bool DoWriteString (const wxString &key, const wxString &szValue) wxOVERRIDE
 
virtual bool DoWriteLong (const wxString &key, long lValue) wxOVERRIDE
 
virtual void Warn ()=0
 Override to notify the user of error conditions involving writability of config files. More...
 
const FilePathGetFilePath () const
 

Private Attributes

const wxString mAppName
 
const wxString mVendorName
 
const wxString mLocalFilename
 
const wxString mGlobalFilename
 
const long mStyle
 
const wxMBConv & mConv
 
std::unique_ptr< wxFileConfig > mConfig
 
int mVersionMajorKeyInit {}
 
int mVersionMinorKeyInit {}
 
int mVersionMicroKeyInit {}
 
bool mDirty
 

Detailed Description

Definition at line 21 of file FileConfig.h.

Constructor & Destructor Documentation

◆ FileConfig()

FileConfig::FileConfig ( const wxString &  appName = wxEmptyString,
const wxString &  vendorName = wxEmptyString,
const wxString &  localFilename = wxEmptyString,
const wxString &  globalFilename = wxEmptyString,
long  style = wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_GLOBAL_FILE,
const wxMBConv &  conv = wxConvAuto() 
)

Definition at line 38 of file FileConfig.cpp.

44 : wxConfigBase(appName, vendorName, localFilename, globalFilename, style),
45  mAppName(appName),
46  mVendorName(vendorName),
47  mLocalFilename(localFilename),
48  mGlobalFilename(globalFilename),
49  mStyle(style),
50  mConv(conv),
51  mDirty(false)
52 {
53 }

◆ ~FileConfig()

FileConfig::~FileConfig ( )
virtual

Definition at line 98 of file FileConfig.cpp.

99 {
100  wxASSERT(mDirty == false);
101 }

References mDirty.

Member Function Documentation

◆ DeleteAll()

bool FileConfig::DeleteAll ( )
virtual

Definition at line 239 of file FileConfig.cpp.

240 {
241  auto res = mConfig->DeleteAll();
242  if (res)
243  {
244  mDirty = true;
245  }
246  return res;
247 }

References mConfig, and mDirty.

Referenced by PluginActions::Handler::OnResetConfig(), and anonymous_namespace{AudacityApp.cpp}::PopulatePreferences().

Here is the caller graph for this function:

◆ DeleteEntry()

bool FileConfig::DeleteEntry ( const wxString &  key,
bool  bDeleteGroupIfEmpty = true 
)
virtual

Definition at line 219 of file FileConfig.cpp.

220 {
221  auto res = mConfig->DeleteEntry(key, bDeleteGroupIfEmpty);
222  if (res)
223  {
224  mDirty = true;
225  }
226  return res;
227 }

References key, mConfig, and mDirty.

Referenced by KeyConfigPrefs::Commit(), TracksPrefs::Commit(), ModuleSettings::GetModuleStatus(), AudacityApp::OnExit(), KeyConfigPrefs::OnImportDefaults(), anonymous_namespace{AudacityApp.cpp}::PopulatePreferences(), PluginManager::RemovePrivateConfig(), PluginManager::RemoveSharedConfig(), ToolBarConfiguration::Write(), and Importer::WriteImportItems().

Here is the caller graph for this function:

◆ DeleteGroup()

bool FileConfig::DeleteGroup ( const wxString &  key)
virtual

Definition at line 229 of file FileConfig.cpp.

230 {
231  auto res = mConfig->DeleteGroup(key);
232  if (res)
233  {
234  mDirty = true;
235  }
236  return res;
237 }

References key, mConfig, and mDirty.

Referenced by TagsEditorDialog::OnSaveDefaults(), anonymous_namespace{AudacityApp.cpp}::PopulatePreferences(), PluginManager::RemovePrivateConfigSubgroup(), and PluginManager::RemoveSharedConfigSubgroup().

Here is the caller graph for this function:

◆ DoReadLong()

bool FileConfig::DoReadLong ( const wxString &  key,
long *  pl 
) const
protectedvirtual

Definition at line 254 of file FileConfig.cpp.

255 {
256  return mConfig->Read(key, pl);
257 }

References key, and mConfig.

◆ DoReadString()

bool FileConfig::DoReadString ( const wxString &  key,
wxString *  pStr 
) const
protectedvirtual

Definition at line 249 of file FileConfig.cpp.

250 {
251  return mConfig->Read(key, pStr);
252 }

References key, and mConfig.

◆ DoWriteLong()

bool FileConfig::DoWriteLong ( const wxString &  key,
long  lValue 
)
protectedvirtual

Definition at line 276 of file FileConfig.cpp.

277 {
278  bool res = mConfig->Write(key, lValue);
279  if (res)
280  {
281  mDirty = true;
282  }
283  return res;
284 }

References key, mConfig, and mDirty.

◆ DoWriteString()

bool FileConfig::DoWriteString ( const wxString &  key,
const wxString &  szValue 
)
protectedvirtual

Definition at line 266 of file FileConfig.cpp.

267 {
268  bool res = mConfig->Write(key, szValue);
269  if (res)
270  {
271  mDirty = true;
272  }
273  return res;
274 }

References key, mConfig, and mDirty.

◆ Flush()

bool FileConfig::Flush ( bool  bCurrentOnly = false)
virtual

Definition at line 153 of file FileConfig.cpp.

154 {
155  if (!mDirty)
156  {
157  return true;
158  }
159 
160  while (true)
161  {
162  FilePath backup = mLocalFilename + ".bkp";
163 
164  if (!wxFileExists(backup) || (wxRemove(backup) == 0))
165  {
166  if (!wxFileExists(mLocalFilename) || (wxRename(mLocalFilename, backup) == 0))
167  {
168  wxFileOutputStream stream(mLocalFilename);
169  if (stream.IsOk())
170  {
171  if (mConfig->Save(stream))
172  {
173  stream.Sync();
174  if (stream.IsOk() && stream.Close())
175  {
176  if (!wxFileExists(backup) || (wxRemove(backup) == 0))
177  {
178  mDirty = false;
179  return true;
180  }
181  }
182  }
183  }
184 
185  if (wxFileExists(backup))
186  {
187  wxRemove(mLocalFilename);
188  wxRename(backup, mLocalFilename);
189  }
190  }
191  }
192 
193  Warn();
194  }
195 
196  return false;
197 }

References mConfig, mDirty, mLocalFilename, and Warn().

Referenced by SetPreferenceCommand::Apply(), ApplyMacroDialog::ApplyMacroToProject(), ProjectSelectionManager::AS_SetSelectionFormat(), ProjectSelectionManager::AS_SetSnapTo(), ScreenshotCommand::CapturePreferences(), DeviceToolBar::ChangeHost(), ExportMP3::CheckFileName(), GUIPrefs::Commit(), KeyConfigPrefs::Commit(), QualityPrefs::Commit(), TracksPrefs::Commit(), ExportMP3::Export(), DeviceToolBar::FillHostDevices(), MP3Exporter::FindLibrary(), FFmpegLibs::FindLibs(), AudioIO::Init(), EffectNoiseRemoval::Init(), UpdateManager::IsTimeForUpdatesChecking(), LoadFFmpeg(), EnumSettingBase::Migrate(), SpectrogramSettings::ColorSchemeEnumSetting::Migrate(), TracksViewModeEnumSetting::Migrate(), ViewActions::Handler::OnAdvancedVZoom(), ApplyMacroDialog::OnApplyToFiles(), AdornedRulerPanel::OnAutoScroll(), PrefsDialog::OnCancel(), ScreenshotBigDialog::OnClose(), BrowserDialog::OnClose(), FrequencyPlotDialog::OnCloseButton(), ScreenshotBigDialog::OnCloseWindow(), ScreenshotBigDialog::OnDirChoose(), SplashDialog::OnDontShow(), TagsEditorDialog::OnDontShow(), AudacityApp::OnExit(), ExportMultipleDialog::OnExport(), KeyConfigPrefs::OnImportDefaults(), ExportMP3Options::OnMono(), TrackActions::Handler::OnMoveSelectionWithTracks(), PrefsDialog::OnOK(), ExportFFmpegOptions::OnOK(), SoundActivatedRecordDialog::OnOK(), TagsEditorDialog::OnOk(), TimerRecordDialog::OnOK(), FFmpegNotFoundDialog::OnOk(), MeterPanel::OnPreferences(), PluginActions::Handler::OnResetConfig(), BenchmarkDialog::OnRun(), TagsEditorDialog::OnSaveDefaults(), LabelTrackMenuTable::OnSetFont(), ViewActions::Handler::OnShowClipping(), ViewActions::Handler::OnShowExtraMenus(), ViewActions::Handler::OnShowNameOverlay(), TrackActions::Handler::OnSyncLock(), AdornedRulerPanel::OnSyncSelToQuickPlay(), TransportActions::Handler::OnTogglePlayRecording(), AdornedRulerPanel::OnToggleQuickPlay(), TransportActions::Handler::OnToggleSoundActivated(), TransportActions::Handler::OnToggleSWPlaythrough(), LabelEditActions::Handler::OnToggleTypeToCreateLabel(), ToolsToolBar::OnTool(), FFmpegImportPlugin::Open(), Registry::OrderingPreferenceInitializer::operator()(), anonymous_namespace{HelpMenus.cpp}::QuickFixDialog::PopulateOrExchange(), anonymous_namespace{AudacityApp.cpp}::PopulatePreferences(), EffectNoiseReduction::Settings::PrefsIO(), CommandManager::RemoveDuplicateShortcuts(), PluginManager::RemovePrivateConfig(), PluginManager::RemovePrivateConfigSubgroup(), PluginManager::RemoveSharedConfig(), PluginManager::RemoveSharedConfigSubgroup(), MacrosWindow::SaveChanges(), SaveEncoding(), DependencyDialog::SaveFutureActionChoice(), SaveOtherFormat(), GlobalPrefsDialog::SavePreferredPage(), ProjectManager::SaveWindowSize(), SelectionBar::SelectionModeUpdated(), PluginManager::SetConfig(), ToolsToolBar::SetCurrentTool(), Importer::SetDefaultOpenType(), DeviceToolBar::SetDevices(), Importer::SetLastOpenType(), ModuleSettings::SetModuleStatus(), TracksPrefs::SetPinnedHeadPositionPreference(), TracksPrefs::SetPinnedHeadPreference(), HelpSystem::ShowHelp(), EffectNoiseRemoval::ShowInterface(), ShowWarningDialog(), ProjectSelectionManager::SSBL_SetBandwidthSelectionFormatName(), ProjectSelectionManager::SSBL_SetFrequencySelectionFormatName(), EffectAutoDuck::Startup(), EffectChangeSpeed::Startup(), EffectClickRemoval::Startup(), EffectCompressor::Startup(), EffectDtmf::Startup(), EffectEqualization::Startup(), EffectLoudness::Startup(), EffectNoise::Startup(), EffectNormalize::Startup(), EffectScienFilter::Startup(), ExportCLOptions::TransferDataFromWindow(), ExportFFmpegAC3Options::TransferDataFromWindow(), ExportFFmpegAACOptions::TransferDataFromWindow(), ExportFFmpegAMRNBOptions::TransferDataFromWindow(), ExportFFmpegOPUSOptions::TransferDataFromWindow(), ExportFFmpegWMAOptions::TransferDataFromWindow(), ExportFLACOptions::TransferDataFromWindow(), ExportMP3Options::TransferDataFromWindow(), ExportOGGOptions::TransferDataFromWindow(), ProjectSelectionManager::TT_SetAudioTimeFormat(), EffectEqualization::UpdateDefaultCurves(), Registry::Visit(), ToolManager::WriteConfig(), Importer::WriteImportItems(), and LabelDialog::WriteSize().

Here is the call graph for this function:

◆ GetFilePath()

const FilePath& FileConfig::GetFilePath ( ) const
inlineprotected

Definition at line 81 of file FileConfig.h.

81 { return mLocalFilename; }

References mLocalFilename.

Referenced by AudacityFileConfig::Warn().

Here is the caller graph for this function:

◆ GetFirstEntry()

bool FileConfig::GetFirstEntry ( wxString &  str,
long &  lIndex 
) const
virtual

Definition at line 123 of file FileConfig.cpp.

124 {
125  return mConfig->GetFirstEntry(str, lIndex);
126 }

References mConfig.

Referenced by ModulePrefs::GetAllModuleStatuses(), and Tags::LoadDefaults().

Here is the caller graph for this function:

◆ GetFirstGroup()

bool FileConfig::GetFirstGroup ( wxString &  str,
long &  lIndex 
) const
virtual

Definition at line 113 of file FileConfig.cpp.

114 {
115  return mConfig->GetFirstGroup(str, lIndex);
116 }

References mConfig.

Referenced by PluginManager::LoadGroup(), and anonymous_namespace{AudacityApp.cpp}::PopulatePreferences().

Here is the caller graph for this function:

◆ GetNextEntry()

bool FileConfig::GetNextEntry ( wxString &  str,
long &  lIndex 
) const
virtual

Definition at line 128 of file FileConfig.cpp.

129 {
130  return mConfig->GetNextEntry(str, lIndex);
131 }

References mConfig.

Referenced by ModulePrefs::GetAllModuleStatuses(), and Tags::LoadDefaults().

Here is the caller graph for this function:

◆ GetNextGroup()

bool FileConfig::GetNextGroup ( wxString &  str,
long &  lIndex 
) const
virtual

Definition at line 118 of file FileConfig.cpp.

119 {
120  return mConfig->GetNextGroup(str, lIndex);
121 }

References mConfig.

Referenced by PluginManager::LoadGroup(), and anonymous_namespace{AudacityApp.cpp}::PopulatePreferences().

Here is the caller graph for this function:

◆ GetNumberOfEntries()

size_t FileConfig::GetNumberOfEntries ( bool  bRecursive = false) const
virtual

Definition at line 133 of file FileConfig.cpp.

134 {
135  return mConfig->GetNumberOfEntries(bRecursive);
136 }

References mConfig.

◆ GetNumberOfGroups()

size_t FileConfig::GetNumberOfGroups ( bool  bRecursive = false) const
virtual

Definition at line 138 of file FileConfig.cpp.

139 {
140  return mConfig->GetNumberOfGroups(bRecursive);
141 }

References mConfig.

◆ GetPath()

const wxString & FileConfig::GetPath ( ) const
virtual

Definition at line 108 of file FileConfig.cpp.

109 {
110  return mConfig->GetPath();
111 }

References mConfig.

Referenced by PluginManager::GetSubgroups(), Tags::LoadDefaults(), anonymous_namespace{AudacityApp.cpp}::PopulatePreferences(), ToolManager::ReadConfig(), and ToolManager::WriteConfig().

Here is the caller graph for this function:

◆ GetVersionKeysInit()

void FileConfig::GetVersionKeysInit ( int &  major,
int &  minor,
int &  micro 
) const
inline

Definition at line 57 of file FileConfig.h.

58  {
59  major = mVersionMajorKeyInit;
60  minor = mVersionMinorKeyInit;
61  micro = mVersionMicroKeyInit;
62  }

References mVersionMajorKeyInit, mVersionMicroKeyInit, and mVersionMinorKeyInit.

Referenced by AudacityApp::InitPart2(), and ToolManager::ReadConfig().

Here is the caller graph for this function:

◆ HasEntry()

bool FileConfig::HasEntry ( const wxString &  strName) const
virtual

Definition at line 148 of file FileConfig.cpp.

149 {
150  return mConfig->HasEntry(strName);
151 }

References mConfig.

Referenced by KeyConfigPrefs::Commit(), and CommandManager::NewIdentifier().

Here is the caller graph for this function:

◆ HasGroup()

bool FileConfig::HasGroup ( const wxString &  strName) const
virtual

Definition at line 143 of file FileConfig.cpp.

144 {
145  return mConfig->HasGroup(strName);
146 }

References mConfig.

◆ Init()

void FileConfig::Init ( )

Definition at line 55 of file FileConfig.cpp.

56 {
57  while (true)
58  {
59  mConfig = std::make_unique<wxFileConfig>
61 
62  // Prevent wxFileConfig from attempting a Flush() during object deletion. This happens
63  // because we don't use the wxFileConfig::Flush() method and so the wxFileConfig dirty
64  // flag never gets reset. During deletion, the dirty flag is checked and a Flush()
65  // performed. This can (and probably will) create bogus temporary files.
66  mConfig->DisableAutoSave();
67 
68  bool canRead = false;
69  bool canWrite = false;
70  int fd;
71 
72  fd = wxOpen(mLocalFilename, O_RDONLY, S_IREAD);
73  if (fd != -1 || errno == ENOENT)
74  {
75  canRead = true;
76  if (fd != -1)
77  {
78  wxClose(fd);
79  }
80  }
81 
82  fd = wxOpen(mLocalFilename, O_WRONLY | O_CREAT, S_IWRITE);
83  if (fd != -1)
84  {
85  canWrite = true;
86  wxClose(fd);
87  }
88 
89  if (canRead && canWrite)
90  {
91  break;
92  }
93 
94  Warn();
95  }
96 }

References mAppName, mConfig, mConv, mGlobalFilename, mLocalFilename, mStyle, mVendorName, and Warn().

Referenced by AudacityFileConfig::Create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RenameEntry()

bool FileConfig::RenameEntry ( const wxString &  oldName,
const wxString &  newName 
)
virtual

Definition at line 199 of file FileConfig.cpp.

200 {
201  auto res = mConfig->RenameEntry(oldName, newName);
202  if (res)
203  {
204  mDirty = true;
205  }
206  return res;
207 }

References mConfig, and mDirty.

◆ RenameGroup()

bool FileConfig::RenameGroup ( const wxString &  oldName,
const wxString &  newName 
)
virtual

Definition at line 209 of file FileConfig.cpp.

210 {
211  auto res = mConfig->RenameGroup(oldName, newName);
212  if (res)
213  {
214  mDirty = true;
215  }
216  return res;
217 }

References mConfig, and mDirty.

◆ SetPath()

void FileConfig::SetPath ( const wxString &  strPath)
virtual

Definition at line 103 of file FileConfig.cpp.

104 {
105  mConfig->SetPath(strPath);
106 }

References mConfig.

Referenced by ModulePrefs::GetAllModuleStatuses(), PluginManager::GetSubgroups(), Tags::LoadDefaults(), PluginManager::LoadGroup(), CommandManager::NewIdentifier(), anonymous_namespace{AudacityApp.cpp}::PopulatePreferences(), ToolManager::ReadConfig(), PluginManager::SaveGroup(), and ToolManager::WriteConfig().

Here is the caller graph for this function:

◆ SetVersionKeysInit()

void FileConfig::SetVersionKeysInit ( int  major,
int  minor,
int  micro 
)
inline

Definition at line 51 of file FileConfig.h.

52  {
53  mVersionMajorKeyInit = major;
54  mVersionMinorKeyInit = minor;
55  mVersionMicroKeyInit = micro;
56  }

References mVersionMajorKeyInit, mVersionMicroKeyInit, and mVersionMinorKeyInit.

Referenced by anonymous_namespace{AudacityApp.cpp}::PopulatePreferences().

Here is the caller graph for this function:

◆ Warn()

virtual void FileConfig::Warn ( )
protectedpure virtual

Override to notify the user of error conditions involving writability of config files.

Implemented in AudacityFileConfig.

Referenced by Flush(), and Init().

Here is the caller graph for this function:

Member Data Documentation

◆ mAppName

const wxString FileConfig::mAppName
private

Definition at line 84 of file FileConfig.h.

Referenced by Init().

◆ mConfig

std::unique_ptr<wxFileConfig> FileConfig::mConfig
private

◆ mConv

const wxMBConv& FileConfig::mConv
private

Definition at line 89 of file FileConfig.h.

Referenced by Init().

◆ mDirty

bool FileConfig::mDirty
private

◆ mGlobalFilename

const wxString FileConfig::mGlobalFilename
private

Definition at line 87 of file FileConfig.h.

Referenced by Init().

◆ mLocalFilename

const wxString FileConfig::mLocalFilename
private

Definition at line 86 of file FileConfig.h.

Referenced by Flush(), GetFilePath(), and Init().

◆ mStyle

const long FileConfig::mStyle
private

Definition at line 88 of file FileConfig.h.

Referenced by Init().

◆ mVendorName

const wxString FileConfig::mVendorName
private

Definition at line 85 of file FileConfig.h.

Referenced by Init().

◆ mVersionMajorKeyInit

int FileConfig::mVersionMajorKeyInit {}
private

Definition at line 95 of file FileConfig.h.

Referenced by GetVersionKeysInit(), and SetVersionKeysInit().

◆ mVersionMicroKeyInit

int FileConfig::mVersionMicroKeyInit {}
private

Definition at line 97 of file FileConfig.h.

Referenced by GetVersionKeysInit(), and SetVersionKeysInit().

◆ mVersionMinorKeyInit

int FileConfig::mVersionMinorKeyInit {}
private

Definition at line 96 of file FileConfig.h.

Referenced by GetVersionKeysInit(), and SetVersionKeysInit().


The documentation for this class was generated from the following files:
FilePath
wxString FilePath
Definition: Identifier.h:227
FileConfig::mDirty
bool mDirty
Definition: FileConfig.h:99
FileConfig::mAppName
const wxString mAppName
Definition: FileConfig.h:84
FileConfig::mVendorName
const wxString mVendorName
Definition: FileConfig.h:85
FileConfig::mLocalFilename
const wxString mLocalFilename
Definition: FileConfig.h:86
FileConfig::mConfig
std::unique_ptr< wxFileConfig > mConfig
Definition: FileConfig.h:91
FileConfig::mVersionMicroKeyInit
int mVersionMicroKeyInit
Definition: FileConfig.h:97
FileConfig::mStyle
const long mStyle
Definition: FileConfig.h:88
FileConfig::mGlobalFilename
const wxString mGlobalFilename
Definition: FileConfig.h:87
key
static const AudacityProject::AttachedObjects::RegisteredFactory key
Definition: CommandManager.cpp:196
FileConfig::mVersionMinorKeyInit
int mVersionMinorKeyInit
Definition: FileConfig.h:96
FileConfig::Warn
virtual void Warn()=0
Override to notify the user of error conditions involving writability of config files.
FileConfig::mVersionMajorKeyInit
int mVersionMajorKeyInit
Definition: FileConfig.h:95
FileConfig::mConv
const wxMBConv & mConv
Definition: FileConfig.h:89