]>
git.saurik.com Git - apt.git/blob - apt-pkg/contrib/configuration.h
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: configuration.h,v 1.16 2002/11/11 06:55:50 doogie Exp $
4 /* ######################################################################
8 This class provides a configuration file and command line parser
9 for a tree-oriented configuration environment. All runtime configuration
12 Each configuration name is given as a fully scoped string such as
14 And has associated with it a text string. The Configuration class only
15 provides storage and lookup for this tree, other classes provide
16 configuration file formats (and parsers/emitters if needed).
18 Most things can get by quite happily with,
19 cout << _config->Find("Foo::Bar") << endl;
21 A special extension, support for ordered lists is provided by using the
22 special syntax, "block::list::" the trailing :: designates the
23 item as a list. To access the list you must use the tree function on
26 ##################################################################### */
28 #ifndef PKGLIB_CONFIGURATION_H
29 #define PKGLIB_CONFIGURATION_H
37 #include <apt-pkg/macros.h>
39 #ifndef APT_8_CLEANER_HEADERS
55 std::string
FullTag(const Item
*Stop
= 0) const;
57 Item() : Parent(0), Child(0), Next(0) {};
65 Item
*Lookup(Item
*Head
,const char *S
,unsigned long const &Len
,bool const &Create
);
66 Item
*Lookup(const char *Name
,const bool &Create
);
67 inline const Item
*Lookup(const char *Name
) const
69 return ((Configuration
*)this)->Lookup(Name
,false);
74 std::string
Find(const char *Name
,const char *Default
= 0) const;
75 std::string
Find(std::string
const &Name
,const char *Default
= 0) const {return Find(Name
.c_str(),Default
);};
76 std::string
Find(std::string
const &Name
, std::string
const &Default
) const {return Find(Name
.c_str(),Default
.c_str());};
77 std::string
FindFile(const char *Name
,const char *Default
= 0) const;
78 std::string
FindDir(const char *Name
,const char *Default
= 0) const;
79 /** return a list of child options
81 * Options like Acquire::Languages are handled as lists which
82 * can be overridden and have a default. For the later two a comma
83 * separated list of values is supported.
85 * \param Name of the parent node
86 * \param Default list of values separated by commas */
87 #if APT_PKG_ABI >= 413
88 std::vector
<std::string
> FindVector(const char *Name
, std::string
const &Default
= "") const;
89 std::vector
<std::string
> FindVector(std::string
const &Name
, std::string
const &Default
= "") const { return FindVector(Name
.c_str(), Default
); };
91 std::vector
<std::string
> FindVector(const char *Name
, std::string
const &Default
) const;
92 std::vector
<std::string
> FindVector(std::string
const &Name
, std::string
const &Default
) const { return FindVector(Name
.c_str(), Default
); };
93 std::vector
<std::string
> FindVector(const char *Name
) const;
94 std::vector
<std::string
> FindVector(std::string
const &Name
) const { return FindVector(Name
.c_str(), ""); };
97 int FindI(const char *Name
,int const &Default
= 0) const;
98 int FindI(std::string
const &Name
,int const &Default
= 0) const {return FindI(Name
.c_str(),Default
);};
99 bool FindB(const char *Name
,bool const &Default
= false) const;
100 bool FindB(std::string
const &Name
,bool const &Default
= false) const {return FindB(Name
.c_str(),Default
);};
101 std::string
FindAny(const char *Name
,const char *Default
= 0) const;
103 inline void Set(const std::string
&Name
,const std::string
&Value
) {Set(Name
.c_str(),Value
);};
104 void CndSet(const char *Name
,const std::string
&Value
);
105 void CndSet(const char *Name
,const int Value
);
106 void Set(const char *Name
,const std::string
&Value
);
107 void Set(const char *Name
,const int &Value
);
109 inline bool Exists(const std::string
&Name
) const {return Exists(Name
.c_str());};
110 bool Exists(const char *Name
) const;
111 bool ExistsAny(const char *Name
) const;
113 // clear a whole tree
114 void Clear(const std::string
&Name
);
117 // remove a certain value from a list (e.g. the list of "APT::Keep-Fds")
118 void Clear(std::string
const &List
, std::string
const &Value
);
119 void Clear(std::string
const &List
, int const &Value
);
121 inline const Item
*Tree(const char *Name
) const {return Lookup(Name
);};
123 inline void Dump() { Dump(std::clog
); };
124 void Dump(std::ostream
& str
);
125 void Dump(std::ostream
& str
, char const * const root
,
126 char const * const format
, bool const emptyValue
);
128 Configuration(const Item
*Root
);
132 /** \brief match a string against a configurable list of patterns */
133 class MatchAgainstConfig
135 std::vector
<regex_t
*> patterns
;
136 APT_HIDDEN
void clearPatterns();
139 MatchAgainstConfig(char const * Config
);
140 virtual ~MatchAgainstConfig();
142 /** \brief Returns \b true for a string matching one of the patterns */
143 bool Match(char const * str
) const;
144 bool Match(std::string
const &str
) const { return Match(str
.c_str()); };
146 /** \brief returns if the matcher setup was successful */
147 bool wasConstructedSuccessfully() const { return patterns
.empty() == false; }
151 extern Configuration
*_config
;
153 bool ReadConfigFile(Configuration
&Conf
,const std::string
&FName
,
154 bool const &AsSectional
= false,
155 unsigned const &Depth
= 0);
157 bool ReadConfigDir(Configuration
&Conf
,const std::string
&Dir
,
158 bool const &AsSectional
= false,
159 unsigned const &Depth
= 0);