#include <keyval.h>
Inheritance diagram for sc::PrefixKeyVal:


Public Methods | |
| ~PrefixKeyVal () | |
| void | errortrace (std::ostream &fp=ExEnv::err0()) |
| Write a message to fp describing the error. | |
| void | dump (std::ostream &fp=ExEnv::err0()) |
| Write a message to fp describing the error. | |
| PrefixKeyVal (const Ref< KeyVal > &, int i) | |
| PrefixKeyVal (const Ref< KeyVal > &, int i, int j) | |
| PrefixKeyVal (const Ref< KeyVal > &, int i, int j, int k) | |
| PrefixKeyVal (const Ref< KeyVal > &, int i, int j, int k, int l) | |
| PrefixKeyVal (const Ref< KeyVal > &, const char *prefix) | |
| PrefixKeyVal (const Ref< KeyVal > &, const char *prefix, int i) | |
| PrefixKeyVal (const Ref< KeyVal > &, const char *prefix, int i, int j) | |
| PrefixKeyVal (const Ref< KeyVal > &, const char *prefix, int i, int j, int k) | |
| PrefixKeyVal (const Ref< KeyVal > &, const char *prefix, int i, int j, int k, int l) | |
| PrefixKeyVal (const char *, const Ref< KeyVal > &) | |
| PrefixKeyVal (const char *, const Ref< KeyVal > &, int) | |
| PrefixKeyVal (const char *, const Ref< KeyVal > &, int, int) | |
| PrefixKeyVal (const char *, const Ref< KeyVal > &, int, int, int) | |
| PrefixKeyVal (const char *, const Ref< KeyVal > &, int, int, int, int) | |
This is convenient for reading keys grouped together with a common prefix. Consider the following code:
sc::Ref<sc::KeyVal> keyval = new sc::PrefixKeyVal("A",original_keyval);
int r = keyval->intvalue("x");
This code will assign to r the value associated with "x" in keyval. keyval will search for "x" by searching for "A::x" in original_keyval.
This class is important for implementing constructors that take KeyVal arguments. When an object is being constructed from a KeyVal, it may contain another object that must be constructed from a KeyVal. In order to let the sub-object read the correct keywords from the KeyVal, without knowledge of the containing objects keyword prefix, a PrefixKeyVal can be constructed. For example, the code
class A: public DescribedClass {
double f0_;
public:
A(const Ref<KeyVal> &keyval): f0_(keyval->doublevalue("f0")) {}
}
class B: public DescribedClass {
double f1_;
Ref<A> a_;
public:
B(const Ref<KeyVal> &keyval):
f1_(keyval->doublevalue("f1")),
a_(new PrefixKeyVal(keyval,"a"))
{}
};
can be used to read ParsedKeyVal input that looks like
b: (
f1 = 1.0
a<A>: (
f0 = 2.0
)
)