8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-31 04:03:03 +01:00
firebird-mirror/src/common/config/config_file.h
2003-01-30 13:26:16 +00:00

100 lines
3.1 KiB
C++

/*
* PROGRAM: Client/Server Common Code
* MODULE: config_file.h
* DESCRIPTION: Configuration manager (file handling)
*
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* Created by: Mark O'Donohue <mark.odonohue@ludwig.edu.au>
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
#ifndef CONFIG_FILE_H
#define CONFIG_FILE_H
#include <functional>
#include <map>
#include "../../common/classes/alloc.h"
#include "fb_string.h"
/**
Since the original (isc.cpp) code wasn't able to provide powerful and
easy-to-use abilities to work with complex configurations, a decision
has been made to create a completely new one.
The below class implements generic file abstraction for new configuration
manager. It allows "value-by-key" retrieval based on plain text files. Both
keys and values are just strings that may be handled case-sensitively or
case-insensitively, depending on host OS. The configuration file is loaded
on demand, its current status can be checked with isLoaded() member function.
All leading and trailing spaces are ignored. Comments (follow after a
hash-mark) are ignored as well.
Now this implementation is used by generic configuration manager
(common/config/config.cpp) and server-side alias manager (jrd/db_alias.cpp).
**/
class ConfigFile
{
typedef Firebird::string string;
// used to provide proper filename handling in various OS
class key_compare : public std::binary_function<const string&, const string&, bool>
{
public:
key_compare() : isCaseSensitive(CASE_SENSITIVITY) {}
bool operator()(const string&, const string&) const;
private:
bool isCaseSensitive;
void uppercase(string&) const;
};
typedef std::map <string, string, key_compare,
Firebird::allocator <std::pair <const string, string> > > mymap_t;
public:
ConfigFile() : isLoadedFlg(false) {}
// configuration file management
const string getConfigFile() { return configFile; }
void setConfigFile(const string& newFile) { configFile = newFile; }
bool isLoaded() const { return isLoadedFlg; }
void loadConfig();
void checkLoadConfig();
// key and value management
bool doesKeyExist(const string&);
string getString(const string&);
// utilities
static void stripLeadingWhiteSpace(string&);
static void stripTrailingWhiteSpace(string&);
static void stripComments(string&);
static string parseKeyFrom(const string&, string::size_type&);
static string parseValueFrom(string, string::size_type);
private:
string configFile;
bool isLoadedFlg;
mymap_t parameters;
};
#endif // CONFIG_FILE_H