Files
secondo/include/Profiles.h
2026-01-23 17:03:45 +08:00

175 lines
5.6 KiB
C++

/*
----
This file is part of SECONDO.
Copyright (C) 2004, University in Hagen, Department of Computer Science,
Database Systems for New Applications.
SECONDO is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
SECONDO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SECONDO; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
----
//paragraph [10] title: [{\Large \bf ] [}]
//paragraph [11] title: [{\large \bf ] [}]
//paragraph [12] title: [{\normalsize \bf ] [}]
//paragraph [21] table1column: [\begin{quote}\begin{tabular}{l}] [\end{tabular}\end{quote}]
//paragraph [22] table2columns: [\begin{quote}\begin{tabular}{ll}] [\end{tabular}\end{quote}]
//paragraph [23] table3columns: [\begin{quote}\begin{tabular}{lll}] [\end{tabular}\end{quote}]
//paragraph [24] table4columns: [\begin{quote}\begin{tabular}{llll}] [\end{tabular}\end{quote}]
//[--------] [\hline]
//characters [1] verbatim: [$] [$]
//characters [2] formula: [$] [$]
//characters [4] teletype: [\texttt{] [}]
//[ae] [\"a]
//[oe] [\"o]
//[ue] [\"u]
//[ss] [{\ss}]
//[<=] [\leq]
//[#] [\neq]
//[tilde] [\verb|~|]
1 Header File: Profiles
January 2002 Ulrich Telle
January 2005, M. Spiekermann. Key values set in the configuration file can
be overruled by environment variables named SECONDO\_PARAM\_~keyname~.
1.1 Overview
Applications often need a mechanism for providing configuration parameters.
One way to supply those parameters is a profile. A profile is a text file
consisting of one ore more named sections which contain one or more named
parameters and their values, respectively. Each line in the profile is
either a section heading, a key/value pair or a comment. A section heading
is enclosed in square brackets; key name and key value are separated by an
equal sign (leading and trailing whitespace is removed from both key name
and value, but intervening blanks are considered to be part of the name or
the value); a comment line starts with semicolon. All Text in a profile has
to be left aligned. Example:
---- [section 1]
; comment
key 1=value 1
key 2=value 2
[section 2]
; comment
key 1=value 1
.... (and so on)
----
1.1 Interface methods
This module offers routines to get or set a parameter:
[21] Routines\\
[--------]
GetParameter \\
SetParameter \\
1.3 Class "SmiProfile"[1]
The class ~SmiProfile~ implements routines to manipulate profile strings
stored in a text file:
*/
#ifndef SMI_PROFILES_H
#define SMI_PROFILES_H
#include <string>
#include <sstream>
#include "SecondoConfig.h"
#include "WinUnix.h"
class SMI_EXPORT SmiProfile
{
public:
static std::string GetParameter( const std::string& sectionName,
const std::string& keyName,
const std::string& defaultValue,
const std::string& fileName,
const bool expand=true );
/*
Searches the profile ~fileName~ for the key ~keyName~ under the section heading
~sectionName~. If found, the associated string is returned, else the
default value is returned.
If ~sectionName~ is the empty string, it will be ignored. i.e. ALL sections are
searched.
*/
static std::string GetUniqueSocketName(const std::string& fileName,
const std::string& port);
/*
If many Secondo installations are placed on the same server, the name of the
socket used to communicate with the SecondoRegistrar process needs to be
unique. Since the port
number for client server communication needs also to be unique we use it as
identifier in the socket name. During runtime, a file like
tmp/SECREGIS\_port1234
may represent such a socket.
*/
static long GetParameter( const std::string& sectionName,
const std::string& keyName,
long defaultValue,
const std::string& fileName );
/*
Searches the profile ~fileName~ for the key ~keyName~ under the section heading
~sectionName~. The function returns
* ~zero~ -- if the key value is not an integer,
* ~actual value~ -- if it is possible to interpret the key value as an
integer (Note that only the beginning of the key value is interpreted, i.e.
"key=345abc"[4] returns "345"[4])
* ~default value~ -- if key or section not found
If ~sectionName~ is the empty string, it will be ignored. i.e. ALL sections are
searched.
*/
static bool SetParameter( const std::string& sectionName,
const std::string& keyName,
const std::string& keyValue,
const std::string& fileName );
/*
Searches the profile ~fileName~ for the section heading ~sectionName~ and
the key ~keyName~. If found the value is changed to ~keyValue~, otherwise
it will be added.
The first special case is when ~keyValue~ is an empty string. Then the
corresponding line is deleted.
The second special case is when both ~keyValue~ and ~keyName~ are empty
strings. In that case the whole section ~sectionName~ is deleted.
Lines beginning with ';' are however kept since they are considered comments.
*/
};
#endif // SMI_PROFILES_H