Class SchemaMapperImpl

Class Documentation

class SchemaMapperImpl

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

This class is very similar in spirit to SchemaImpl; look there for more information (though SchemaMapper is not copy-on-write).

Public Types

typedef boost::mpl::transform<FieldTypes, MakeKeyPair>::type KeyPairTypes

An MPL sequence of all the allowed pair templates.

typedef boost::make_variant_over<KeyPairTypes>::type KeyPairVariant

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

typedef std::vector<KeyPairVariant> KeyPairMap

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

Public Functions

SchemaMapperImpl(Schema const &input, Schema const &output)

Constructor from the given input and output schemas.

Friends

friend lsst::afw::table::detail::SchemaMapperImpl::table::SchemaMapper
friend lsst::afw::table::detail::SchemaMapperImpl::detail::Access
template<typename F>
struct VisitorWrapper : public boost::static_visitor<>

A functor-wrapper used in the implementation of SchemaMapper::forEach.

See SchemaImpl::VisitorWrapper for discussion of the motivation.

Public Functions

template<typename T>
void operator()(std::pair<Key<T>, Key<T>> const &pair) const

Call the wrapped function.

void operator()(KeyPairVariant const &v) const

Invoke the visitation.

The call to boost::apply_visitor will call the appropriate template of operator().

This overload allows a VisitorWrapper to be applied directly on a variant object with function-call syntax, allowing us to use it on our vector of variants with std::for_each and other STL algorithms.

template<typename T>
VisitorWrapper(T &&func)

Construct the wrappper.