---
name: "sc_PrefixKeyVal"
section: "3"
platform: "linux"
package: "libsc-doc"
version: "2.3.1-22"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/sc_PrefixKeyVal"
---

# sc\_PrefixKeyVal(3)

PrefixKeyVal is a KeyVal that searches a different KeyVal using modified keys.

## NAME

sc::PrefixKeyVal - **PrefixKeyVal** is a **KeyVal** that searches a different **KeyVal** using modified keys.

## SYNOPSIS

`#include <keyval.h>`

Inherits **sc::KeyVal**.

### Public Member Functions

**Constructors.**\
 Construct a **PrefixKeyVal**, using the given prefix and indices.

**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** ()\
 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.

### Additional Inherited Members

## Detailed Description

**PrefixKeyVal** is a **KeyVal** that searches a different **KeyVal** using modified keys.

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<B>: (
  f1 = 1.0
  a<A>: (
    f0 = 2.0
  )
)
```

## Member Function Documentation

### void sc::PrefixKeyVal::dump (std::ostream & fp = ExEnv::err0`()`)` [virtual]`

Write a message to fp describing the error.

Reimplemented from **sc::KeyVal**.

### void sc::PrefixKeyVal::errortrace (std::ostream & fp = ExEnv::err0`()`)` [virtual]`

Write a message to fp describing the error.

Reimplemented from **sc::KeyVal**.

## Author

Generated automatically by Doxygen for MPQC from the source code.
