LSST Applications g063fba187b+cac8b7c890,g0f08755f38+6aee506743,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a2382251a+b4475c5878,g1dcb35cd9c+8f9bc1652e,g20f6ffc8e0+6aee506743,g217e2c1bcf+73dee94bd0,g28da252d5a+1f19c529b9,g2bbee38e9b+3f2625acfc,g2bc492864f+3f2625acfc,g3156d2b45e+6e55a43351,g32e5bea42b+1bb94961c2,g347aa1857d+3f2625acfc,g35bb328faa+a8ce1bb630,g3a166c0a6a+3f2625acfc,g3e281a1b8c+c5dd892a6c,g3e8969e208+a8ce1bb630,g414038480c+5927e1bc1e,g41af890bb2+8a9e676b2a,g7af13505b9+809c143d88,g80478fca09+6ef8b1810f,g82479be7b0+f568feb641,g858d7b2824+6aee506743,g89c8672015+f4add4ffd5,g9125e01d80+a8ce1bb630,ga5288a1d22+2903d499ea,gb58c049af0+d64f4d3760,gc28159a63d+3f2625acfc,gcab2d0539d+b12535109e,gcf0d15dbbd+46a3f46ba9,gda6a2b7d83+46a3f46ba9,gdaeeff99f8+1711a396fd,ge79ae78c31+3f2625acfc,gef2f8181fd+0a71e47438,gf0baf85859+c1f95f4921,gfa517265be+6aee506743,gfa999e8aa5+17cd334064,w.2024.51
LSST Data Management Base Package
Loading...
Searching...
No Matches
Macros
config.h File Reference

Go to the source code of this file.

Macros

#define LSST_CONTROL_FIELD(NAME, TYPE, DOC)
 A preprocessor macro used to define fields in C++ "control object" structs.
 
#define LSST_NESTED_CONTROL_FIELD(NAME, MODULE, TYPE, DOC)
 A preprocessor macro used to define fields in C++ "control object" structs, for nested control objects.
 

Macro Definition Documentation

◆ LSST_CONTROL_FIELD

#define LSST_CONTROL_FIELD ( NAME,
TYPE,
DOC )
Value:
static char const * _doc_ ## NAME() { \
static char const * doc = DOC; \
return doc; \
} \
static char const * _type_ ## NAME() { \
static char const * type = #TYPE; \
return type; \
} \
TYPE NAME
table::Key< int > type
Definition Detector.cc:163

A preprocessor macro used to define fields in C++ "control object" structs.

These objects can then be wrapped into full-fledged Config objects by the functions in lsst.pex.config.wrap.

The defaults for the config class will be set properly if and only if the control class is default-constructable.

See lsst.pex.config.wrap.makeConfigClass for a complete example of how to use this macro.

Definition at line 43 of file config.h.

43#define LSST_CONTROL_FIELD(NAME, TYPE, DOC) \
44 static char const * _doc_ ## NAME() { \
45 static char const * doc = DOC; \
46 return doc; \
47 } \
48 static char const * _type_ ## NAME() { \
49 static char const * type = #TYPE; \
50 return type; \
51 } \
52 TYPE NAME

◆ LSST_NESTED_CONTROL_FIELD

#define LSST_NESTED_CONTROL_FIELD ( NAME,
MODULE,
TYPE,
DOC )
Value:
static char const * _doc_ ## NAME() { \
static char const * doc = DOC; \
return doc; \
} \
static char const * _type_ ## NAME() { \
static char const * type = #TYPE; \
return type; \
} \
static char const * _module_ ## NAME() { \
static char const * mod = #MODULE; \
return mod; \
} \
TYPE NAME

A preprocessor macro used to define fields in C++ "control object" structs, for nested control objects.

These can be wrapped into Config objects by the functions in lsst.pex.config.wrap.

The nested object will be held as a regular, by-value data member (there's currently no way to use smart pointers or getters/setters instead).

The nested control object class must also be wrapped into a config object, and the Python module of the wrapped nested control object must be passed as the MODULE argument to the macro. When a wrapped control object is used as a nested field in the same package it is defined in, the MODULE argument must refer to the actual wrapped module, not the just the package, even if the name is lifted into the package namespace.

See lsst.pex.config.wrap.makeConfigClass for a complete example of how to use this macro.

Definition at line 69 of file config.h.

69#define LSST_NESTED_CONTROL_FIELD(NAME, MODULE, TYPE, DOC) \
70 static char const * _doc_ ## NAME() { \
71 static char const * doc = DOC; \
72 return doc; \
73 } \
74 static char const * _type_ ## NAME() { \
75 static char const * type = #TYPE; \
76 return type; \
77 } \
78 static char const * _module_ ## NAME() { \
79 static char const * mod = #MODULE; \
80 return mod; \
81 } \
82 TYPE NAME