lsst.afw  21.0.0-34-g13549a6f6+8935f19055
Public Types | Public Member Functions | Static Public Attributes | Friends | List of all members
lsst::afw::table::detail::SchemaImpl Class Reference

A private implementation class to hide the messy details of Schema. More...

#include <SchemaImpl.h>

Public Types

using ItemVariant = decltype(makeItemVariantType(FieldTypes{}))
 A Boost.Variant type that can hold any one of the allowed SchemaItem types. More...
 
typedef std::vector< ItemVariantItemContainer
 A std::vector whose elements can be any of the allowed SchemaItem types. More...
 
typedef std::map< std::string, int > NameMap
 A map from field names to position in the vector, so we can do name lookups. More...
 
typedef std::map< int, int > OffsetMap
 A map from standard field offsets to position in the vector, so we can do field lookups. More...
 
typedef std::map< std::pair< int, int >, int > FlagMap
 A map from Flag field offset/bit pairs to position in the vector, so we can do Flag field lookups. More...
 

Public Member Functions

int getRecordSize () const
 The size of a record in bytes. More...
 
int getFieldCount () const
 The total number of fields. More...
 
int getFlagFieldCount () const
 The number of Flag fields. More...
 
int getNonFlagFieldCount () const
 The number of non-Flag fields. More...
 
template<typename T >
SchemaItem< T > find (std::string const &name) const
 Find an item by name (used to implement Schema::find). More...
 
template<typename T >
SchemaItem< T > find (Key< T > const &key) const
 Find an item by key (used to implement Schema::find). More...
 
SchemaItem< Flag > find (Key< Flag > const &key) const
 Find an item by key (used to implement Schema::find). More...
 
template<typename F >
decltype(auto) findAndApply (std::string const &name, F &&func) const
 Find an item by name and run the given functor on it. More...
 
std::set< std::stringgetNames (bool topOnly) const
 Return a set of field names (used to implement Schema::getNames). More...
 
std::set< std::stringgetNames (bool topOnly, std::string const &prefix) const
 Return a set of field names (used to implement SubSchema::getNames). More...
 
template<typename T >
int contains (SchemaItem< T > const &item, int flags) const
 
template<typename T >
Key< T > addField (Field< T > const &field, bool doReplace=false)
 Add a field to the schema (used to implement Schema::addField). More...
 
Key< Flag > addField (Field< Flag > const &field, bool doReplace=false)
 Add a field to the schema (used to implement Schema::addField). More...
 
template<typename T >
Key< Array< T > > addField (Field< Array< T > > const &field, bool doReplace=false)
 Add a field to the schema (used to implement Schema::addField). More...
 
Key< std::stringaddField (Field< std::string > const &field, bool doReplace=false)
 Add a field to the schema (used to implement Schema::addField). More...
 
template<typename T >
void replaceField (Key< T > const &key, Field< T > const &field)
 Replace the Field in an existing SchemaItem without changing the Key. More...
 
ItemContainer const & getItems () const
 Return the vector of SchemaItem variants. More...
 
 SchemaImpl ()
 Default constructor. More...
 

Static Public Attributes

static int const VERSION = 3
 

Friends

class detail::Access
 

Detailed Description

A private implementation class to hide the messy details of Schema.

This can't be a real pimpl class, because some of the most important functionality is in the forEach function, a templated function we can't explicitly instantiate in a source file. But putting all the details here draws a clear line between what users should look at (Schema) and what they shouldn't (this).

Because Schema holds SchemaImpl by shared pointer, one SchemaImpl can be shared between multiple Schemas (and SubSchemas), which implement copy-on-write by creating a new SchemaImpl if the pointer they have isn't unique when they are modified.

Definition at line 45 of file SchemaImpl.h.

Member Typedef Documentation

◆ FlagMap

A map from Flag field offset/bit pairs to position in the vector, so we can do Flag field lookups.

Definition at line 63 of file SchemaImpl.h.

◆ ItemContainer

A std::vector whose elements can be any of the allowed SchemaItem types.

Definition at line 57 of file SchemaImpl.h.

◆ ItemVariant

using lsst::afw::table::detail::SchemaImpl::ItemVariant = decltype(makeItemVariantType(FieldTypes{}))

A Boost.Variant type that can hold any one of the allowed SchemaItem types.

Definition at line 55 of file SchemaImpl.h.

◆ NameMap

A map from field names to position in the vector, so we can do name lookups.

Definition at line 59 of file SchemaImpl.h.

◆ OffsetMap

A map from standard field offsets to position in the vector, so we can do field lookups.

Definition at line 61 of file SchemaImpl.h.

Constructor & Destructor Documentation

◆ SchemaImpl()

lsst::afw::table::detail::SchemaImpl::SchemaImpl ( )
inlineexplicit

Default constructor.

Definition at line 136 of file SchemaImpl.h.

Member Function Documentation

◆ addField() [1/4]

template<typename T >
Key< Array< T > > lsst::afw::table::detail::SchemaImpl::addField ( Field< Array< T > > const &  field,
bool  doReplace = false 
)

Add a field to the schema (used to implement Schema::addField).

Definition at line 295 of file Schema.cc.

◆ addField() [2/4]

Key< Flag > lsst::afw::table::detail::SchemaImpl::addField ( Field< Flag > const &  field,
bool  doReplace = false 
)

Add a field to the schema (used to implement Schema::addField).

Definition at line 319 of file Schema.cc.

◆ addField() [3/4]

Key< std::string > lsst::afw::table::detail::SchemaImpl::addField ( Field< std::string > const &  field,
bool  doReplace = false 
)

Add a field to the schema (used to implement Schema::addField).

Definition at line 304 of file Schema.cc.

◆ addField() [4/4]

template<typename T >
Key< T > lsst::afw::table::detail::SchemaImpl::addField ( Field< T > const &  field,
bool  doReplace = false 
)

Add a field to the schema (used to implement Schema::addField).

Definition at line 315 of file Schema.cc.

◆ contains()

template<typename T >
int lsst::afw::table::detail::SchemaImpl::contains ( SchemaItem< T > const &  item,
int  flags 
) const

Definition at line 226 of file Schema.cc.

◆ find() [1/3]

SchemaItem< Flag > lsst::afw::table::detail::SchemaImpl::find ( Key< Flag > const &  key) const

Find an item by key (used to implement Schema::find).

Definition at line 127 of file Schema.cc.

◆ find() [2/3]

template<typename T >
SchemaItem< T > lsst::afw::table::detail::SchemaImpl::find ( Key< T > const &  key) const

Find an item by key (used to implement Schema::find).

Definition at line 111 of file Schema.cc.

◆ find() [3/3]

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

Find an item by name (used to implement Schema::find).

Definition at line 93 of file Schema.cc.

◆ findAndApply()

template<typename F >
decltype(auto) lsst::afw::table::detail::SchemaImpl::findAndApply ( std::string const &  name,
F &&  func 
) const
inline

Find an item by name and run the given functor on it.

Definition at line 90 of file SchemaImpl.h.

◆ getFieldCount()

int lsst::afw::table::detail::SchemaImpl::getFieldCount ( ) const
inline

The total number of fields.

Definition at line 69 of file SchemaImpl.h.

◆ getFlagFieldCount()

int lsst::afw::table::detail::SchemaImpl::getFlagFieldCount ( ) const
inline

The number of Flag fields.

Definition at line 72 of file SchemaImpl.h.

◆ getItems()

ItemContainer const& lsst::afw::table::detail::SchemaImpl::getItems ( ) const
inline

Return the vector of SchemaItem variants.

Fields are in the order they are added. That means they're also ordered with increasing Key offsets, except for Flag fields, which are in increasing order of (offset, bit) relative to each other, but not relative to all the other fields.

Definition at line 133 of file SchemaImpl.h.

◆ getNames() [1/2]

std::set< std::string > lsst::afw::table::detail::SchemaImpl::getNames ( bool  topOnly) const

Return a set of field names (used to implement Schema::getNames).

Definition at line 252 of file Schema.cc.

◆ getNames() [2/2]

std::set< std::string > lsst::afw::table::detail::SchemaImpl::getNames ( bool  topOnly,
std::string const &  prefix 
) const

Return a set of field names (used to implement SubSchema::getNames).

Definition at line 271 of file Schema.cc.

◆ getNonFlagFieldCount()

int lsst::afw::table::detail::SchemaImpl::getNonFlagFieldCount ( ) const
inline

The number of non-Flag fields.

Definition at line 75 of file SchemaImpl.h.

◆ getRecordSize()

int lsst::afw::table::detail::SchemaImpl::getRecordSize ( ) const
inline

The size of a record in bytes.

Definition at line 66 of file SchemaImpl.h.

◆ replaceField()

template<typename T >
void lsst::afw::table::detail::SchemaImpl::replaceField ( Key< T > const &  key,
Field< T > const &  field 
)

Replace the Field in an existing SchemaItem without changing the Key.

Definition at line 194 of file Schema.cc.

Friends And Related Function Documentation

◆ detail::Access

friend class detail::Access
friend

Definition at line 139 of file SchemaImpl.h.

Member Data Documentation

◆ VERSION

int const lsst::afw::table::detail::SchemaImpl::VERSION = 3
static

Definition at line 52 of file SchemaImpl.h.


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