LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Friends | List of all members
lsst::afw::table::SubSchema Class Referencefinal

A proxy type for name lookups in a Schema. More...

#include <Schema.h>

Public Member Functions

std::string join (std::string const &a, std::string const &b) const
 Join strings using the field delimiter appropriate for this Schema. More...
 
std::string join (std::string const &a, std::string const &b, std::string const &c) const
 
std::string join (std::string const &a, std::string const &b, std::string const &c, std::string const &d) const
 
template<typename T >
SchemaItem< T > find (std::string const &name) const
 Find a nested SchemaItem by name. More...
 
template<typename F >
void findAndApply (std::string const &name, F &&func) const
 Find a nested SchemaItem by name and run a functor on it. More...
 
template<typename F >
void apply (F &&func) const
 Run functor on the SchemaItem represented by this SubSchema. More...
 
SubSchema operator[] (std::string const &name) const
 Return a nested proxy. More...
 
std::string const & getPrefix () const
 Return the prefix that defines this SubSchema relative to its parent Schema. More...
 
std::set< std::stringgetNames (bool topOnly=false) const
 Return a set of nested names that start with the SubSchema's prefix. More...
 
template<typename T >
 operator Key< T > () const
 Implicit conversion to the appropriate Key type. More...
 
template<typename T >
 operator Field< T > () const
 Implicit conversion to the appropriate Key type. More...
 

Friends

class Schema
 

Detailed Description

A proxy type for name lookups in a Schema.

Elements of schema names are assumed to be separated by underscores ("a_b_c"); an incomplete lookup is one that does not resolve to a field. Not that even complete lookups can have nested names; a Point field, for instance, has "x" and "y" nested names.

This proxy object is implicitly convertible to both the appropriate Key type and the appropriate Field type, if the name is a complete one, and supports additional find() operations for nested names.

SubSchema is implemented as a proxy that essentially calls Schema::find after concatenating strings. It does not provide any performance advantage over using Schema::find directly. It is also lazy, so looking up a name prefix that does not exist within the schema is not considered an error until the proxy is used.

Some examples:

Schema schema(false);
Key<int> a_i = schema.addField<int>("a_i", "integer field");
Key< Point<double> > a_p = schema.addField< Point<double> >("a_p", "point field");

assert(schema["a_i"] == a_i);
SubSchema a = schema["a"];
assert(a["i"] == a_i);
Field<int> f_a_i = schema["a_i"];
assert(f_a_i.getDoc() == "integer field");
assert(schema["a_i"] == "a_i");
assert(schema.find("a_p_x") == a_p.getX());

Definition at line 367 of file Schema.h.

Member Function Documentation

◆ apply()

template<typename F >
void lsst::afw::table::SubSchema::apply ( F &&  func) const
inline

Run functor on the SchemaItem represented by this SubSchema.

The given functor must have an overloaded function call operator that accepts any SchemaItem type (the same as a functor provided to apply or Schema::forEach).

Exceptions
Throwspex::exceptions::NotFoundError if the SubSchemas prefix does not correspond to the full name of a regular field (not a named subfield).

Definition at line 412 of file Schema.h.

412  {
413  _impl->findAndApply(_aliases->apply(_name), std::forward<F>(func));
414  }
decltype(auto) findAndApply(std::string const &name, F &&func) const
Find an item by name and run the given functor on it.
Definition: SchemaImpl.h:90

◆ find()

template<typename T >
SchemaItem< T > lsst::afw::table::SubSchema::find ( std::string const &  name) const

Find a nested SchemaItem by name.

Definition at line 584 of file Schema.cc.

584  {
585  return _impl->find<T>(_aliases->apply(join(_name, name)));
586 }
table::Key< std::string > name
Definition: Amplifier.cc:116
std::string join(std::string const &a, std::string const &b) const
Join strings using the field delimiter appropriate for this Schema.
Definition: Schema.cc:575
SchemaItem< T > find(std::string const &name) const
Find an item by name (used to implement Schema::find).
Definition: Schema.cc:92

◆ findAndApply()

template<typename F >
void lsst::afw::table::SubSchema::findAndApply ( std::string const &  name,
F &&  func 
) const
inline

Find a nested SchemaItem by name and run a functor on it.

Names corresponding to named subfields are not accepted. The given functor must have an overloaded function call operator that accepts any SchemaItem type (the same as a functor provided to apply or Schema::forEach).

Definition at line 396 of file Schema.h.

396  {
397  _impl->findAndApply(_aliases->apply(join(_name, name)), std::forward<F>(func));
398  }

◆ getNames()

std::set< std::string > lsst::afw::table::SubSchema::getNames ( bool  topOnly = false) const

Return a set of nested names that start with the SubSchema's prefix.

Returns an instance of Python's builtin set in Python.

See also
Schema::getNames

Definition at line 592 of file Schema.cc.

592 { return _impl->getNames(topOnly, _name); }
std::set< std::string > getNames(bool topOnly) const
Return a set of field names (used to implement Schema::getNames).
Definition: Schema.cc:251

◆ getPrefix()

std::string const& lsst::afw::table::SubSchema::getPrefix ( ) const
inline

Return the prefix that defines this SubSchema relative to its parent Schema.

Definition at line 420 of file Schema.h.

420 { return _name; }

◆ join() [1/3]

std::string lsst::afw::table::SubSchema::join ( std::string const &  a,
std::string const &  b 
) const

Join strings using the field delimiter appropriate for this Schema.

Definition at line 575 of file Schema.cc.

575  {
576  // delegate to utility funcs at top of this file
577  return afw::table::join(a, b, getDelimiter());
578 }
table::Key< int > b
table::Key< int > a

◆ join() [2/3]

std::string lsst::afw::table::SubSchema::join ( std::string const &  a,
std::string const &  b,
std::string const &  c 
) const
inline

Definition at line 374 of file Schema.h.

374  {
375  return join(join(a, b), c);
376  }

◆ join() [3/3]

std::string lsst::afw::table::SubSchema::join ( std::string const &  a,
std::string const &  b,
std::string const &  c,
std::string const &  d 
) const
inline

Definition at line 377 of file Schema.h.

378  {
379  return join(join(a, b), join(c, d));
380  }

◆ operator Field< T >()

template<typename T >
lsst::afw::table::SubSchema::operator Field< T > ( ) const
inline

Implicit conversion to the appropriate Key type.

Implicit conversion operators that are invoked via assignment cannot be translated to Python. Instead, the Python wrappers provide an equivalent asField() method.

Definition at line 450 of file Schema.h.

450  {
451  return _impl->find<T>(_aliases->apply(_name)).field;
452  }
table::Key< int > field
Definition: ApCorrMap.cc:77

◆ operator Key< T >()

template<typename T >
lsst::afw::table::SubSchema::operator Key< T > ( ) const
inline

Implicit conversion to the appropriate Key type.

Implicit conversion operators that are invoked via assignment cannot be translated to Python. Instead, the Python wrappers provide an equivalent asKey() method.

Definition at line 438 of file Schema.h.

438  {
439  return _impl->find<T>(_aliases->apply(_name)).key;
440  }

◆ operator[]()

SubSchema lsst::afw::table::SubSchema::operator[] ( std::string const &  name) const

Return a nested proxy.

Definition at line 588 of file Schema.cc.

588  {
589  return SubSchema(_impl, _aliases, join(_name, name));
590 }

Friends And Related Function Documentation

◆ Schema

friend class Schema
friend

Definition at line 455 of file Schema.h.


The documentation for this class was generated from the following files: