ome-files 0.2.2

Classes | Public Types | Public Member Functions | Private Types | Private Attributes | List of all members
ome::files::MetadataMap Class Reference

Metadata key-value map using a restricted set of value types. More...

`#include <ome/files/MetadataMap.h>`

Collaboration diagram for ome::files::MetadataMap:
[legend]

## Classes
struct | getkey
| Functor to get a map key. More...
struct | make_vector
| Convert T into a std::vector<T>. More...

## Public Types
typedef std::string | key_type
| Key type.
typedef boost::make_variant_over< discriminated_types >::type | value_type
| Value type, allowing assignment of all storable types.
typedef std::map< key_type, value_type > | map_type
| std::string to discriminated type mapping.
typedef map_type::size_type | size_type
| Size type.
typedef map_type::iterator | iterator
| Iterator.
typedef map_type::const_iterator | const_iterator
| Constant iterator.
typedef map_type::reverse_iterator | reverse_iterator
| Reverse iterator.
typedef map_type::const_reverse_iterator | const_reverse_iterator
| Constant reverse iterator.

## Public Member Functions
| MetadataMap ()
| Constructor.
| ~MetadataMap ()
| Destructor.
void | set (const key_type &key, const value_type &value)
| Add a key-value pair to the map. More...
template<typename T >
void | set (const key_type &key, const T &value)
| Add a key-value pair to the map. More...
template<typename T >
void | append (const key_type &key, const T &value)
| Append a value to a vector. More...
bool | get (const key_type &key, value_type &value) const
| Get the value of a particular key from the map. More...
template<typename T >
bool | get (const key_type &key, T &value) const
| Get the value of a particular key from the map. More...
template<typename T >
T & | get (const key_type &key)
| Get a reference to the value of a particular key from the map. More...
template<typename T >
const T & | get (const key_type &key) const
| Get a reference to the value of a particular key from the map. More...
iterator | find (const key_type &key)
| Find a key in the map. More...
const_iterator | find (const key_type &key) const
| Find a key in the map. More...
std::pair< iterator, bool > | insert (map_type::value_type &value)
| Insert a value into the map. More...
void | erase (const key_type &key)
| Erase a key from the map by name. More...
void | erase (iterator pos)
| Erase a key from the map by an iterator position. More...
std::vector< key_type > | keys () const
| Get a list of keys in the map. More...
void | merge (const MetadataMap &map, const std::string &prefix)
| Merge a separate map into this map. More...
MetadataMap | flatten () const
| Create a flattened map. More...
map_type & | map ()
| Get the underlying map. More...
const map_type & | map () const
| Get the underlying map. More...
iterator | begin ()
| Get an iterator to the beginning of the map. More...
const_iterator | begin () const
| Get a constant iterator to the beginning of the map. More...
iterator | end ()
| Get an iterator to the end of the map. More...
const_iterator | end () const
| Get a constant iterator to the end of the map. More...
reverse_iterator | rbegin ()
| Get a reverse iterator to the end of the map. More...
const_reverse_iterator | rbegin () const
| Get a constant reverse iterator to the end of the map. More...
reverse_iterator | rend ()
| Get a reverse iterator to the beginning of the map. More...
const_reverse_iterator | rend () const
| Get a constant reverse iterator to the beginning of the map. More...
value_type & | operator[] (const key_type &key)
| Get or set a value by key index. More...
bool | operator== (const MetadataMap &rhs) const
| Compare maps for equality. More...
bool | operator!= (const MetadataMap &rhs) const
| Compare maps for non-equality. More...
bool | operator< (const MetadataMap &rhs) const
| Check if map is less than another map. More...
bool | operator<= (const MetadataMap &rhs) const
| Check if map is less than or equal to another map. More...
bool | operator> (const MetadataMap &rhs) const
| Check if map is greater than another map. More...
bool | operator>= (const MetadataMap &rhs) const
| Check if map is greater than or equal to another map. More...
size_type | size () const
| Get the size of the map. More...
bool | empty () const
| Check if the map is empty. More...
void | clear ()
| Clear the map. More...

## Private Types
typedef boost::mpl::vector< std::string, bool > | non_numeric_types
| Storable non-numeric types.
typedef boost::mpl::vector< uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t > | integer_types
| Storable integer types.
typedef boost::mpl::vector< float, double, long double > | float_types
| Storable floating-point types.
typedef boost::mpl::joint_view< integer_types, float_types >::type | numeric_types_view
| Aggregate view of all numeric types.
typedef boost::mpl::joint_view< non_numeric_types, numeric_types_view >::type | basic_types_view
| Aggregate view of all storable simple types.
typedef boost::mpl::transform_view< basic_types_view, make_vector< boost::mpl::_1 > >::type | list_types_view
| Aggregate view of all storable list types.
typedef boost::mpl::joint_view< basic_types_view, list_types_view > | all_types_view
| Aggregate view of all storable types.
typedef boost::mpl::insert_range< boost::mpl::vector0<>, boost::mpl::end< boost::mpl::vector0<> >::type, all_types_view >::type | discriminated_types
| List of discriminated types used by boost::variant.

## Private Attributes
map_type | discriminating_map
| Key-value mapping.

## Detailed Description

Metadata key-value map using a restricted set of value types.

Permitted types include `std::string`, `bool`, integer types (`uint8_t`, `uint16_t`, `uint32_t`, `uint64_t`, `int8_t`, `int16_t`, `int32_t`, `int64_t`) and floating point types (`float`, `double`, `long` `double`). Additionally a `std::vector` specialised for each of the aforementioned types may also be stored. However, types may not be mixed within a single `std::vector`.

The set() method permits setting of values, which includes both simple values and vectors of any supported type. The convenience method append() allows appending of a single value to a list.

The get() methods permit retrieval of values. There are various forms, which offer different tradeoffs, for example copying the value and returning an error, versus returning a direct reference but throwing an exception on error.

## Member Function Documentation

## § append()

template<typename T >

void ome::files::MetadataMap::append | ( | const key_type & | key,
|  | const T & | value
| ) |  |
| inline

Append a value to a vector.

Note
  If a key by the same already exists in the map and is of the wrong type or is not a vector, it will be removed and replaced.

Parameters

  key | the key name.
  value | the value to append.

## § begin() [1/2]

iterator ome::files::MetadataMap::begin | ( |  | ) |
| inline

Get an iterator to the beginning of the map.

Returns
  an iterator.

Referenced by keys(), merge(), and ome::files::detail::FormatReader::setId().

Here is the caller graph for this function:

## § begin() [2/2]

const_iterator ome::files::MetadataMap::begin | ( |  | ) | const
| inline

Get a constant iterator to the beginning of the map.

Returns
  a constant iterator.

## § clear()

void ome::files::MetadataMap::clear | ( |  | ) |
| inline

Clear the map.

All keys are cleared from the map.

Referenced by ome::files::detail::FormatReader::initFile().

Here is the caller graph for this function:

## § empty()

bool ome::files::MetadataMap::empty | ( |  | ) | const
| inline

Check if the map is empty.

Returns
  `true` if empty, `false` otherwise.

Referenced by ome::files::fillOriginalMetadata().

Here is the caller graph for this function:

## § end() [1/2]

iterator ome::files::MetadataMap::end | ( |  | ) |
| inline

Get an iterator to the end of the map.

Returns
  an iterator.

Referenced by get(), keys(), merge(), set(), and ome::files::detail::FormatReader::setId().

Here is the caller graph for this function:

## § end() [2/2]

const_iterator ome::files::MetadataMap::end | ( |  | ) | const
| inline

Get a constant iterator to the end of the map.

Returns
  a constant iterator.

## § erase() [1/2]

void ome::files::MetadataMap::erase | ( | const key_type & | key | ) |
| inline

Erase a key from the map by name.

Parameters

  key | the key to erase.

Referenced by set().

Here is the caller graph for this function:

## § erase() [2/2]

void ome::files::MetadataMap::erase | ( | iterator | pos | ) |
| inline

Erase a key from the map by an iterator position.

Parameters

  pos | the iterator position to erase.

## § find() [1/2]

iterator ome::files::MetadataMap::find | ( | const key_type & | key | ) |
| inline

Find a key in the map.

Parameters

  key | the key to find.

Returns
  an iterator to the key-value pair.

Referenced by get(), and set().

Here is the caller graph for this function:

## § find() [2/2]

const_iterator ome::files::MetadataMap::find | ( | const key_type & | key | ) | const
| inline

Find a key in the map.

Parameters

  key | the key to find.

Returns
  an iterator to the key-value pair.

## § flatten()

MetadataMap ome::files::MetadataMap::flatten | ( |  | ) | const
| inline

Create a flattened map.

All vectors in the map will be flattened, which is the replacement of each vector by a key per element with with a `#n` key suffix.

Returns
  the flattened map.

References discriminating_map, and map().

Referenced by ome::files::fillOriginalMetadata(), and merge().

Here is the caller graph for this function:

## § get() [1/4]

bool ome::files::MetadataMap::get | ( | const key_type & | key,
|  | value_type & | value
| ) |  | const
| inline

Get the value of a particular key from the map.

If the key was not found, `value` will remain unmodified.

Parameters

  key | the key to find.
  value | a reference to store a copy of the value.

Returns
  `true` if the key was found, `false` otherwise.

References end(), and find().

Referenced by ome::files::detail::FormatReader::getMetadataValue(), and ome::files::detail::FormatReader::getSeriesMetadataValue().

Here is the caller graph for this function:

## § get() [2/4]

template<typename T >

bool ome::files::MetadataMap::get | ( | const key_type & | key,
|  | T & | value
| ) |  | const
| inline

Get the value of a particular key from the map.

If the key was not found, or the type of `value` does not match the stored value type, `value` will remain unmodified.

Parameters

  key | the key to find.
  value | a reference to store a copy of the value.

Returns
  `true` if the key was found and the value was of the correct type, `false` otherwise.

## § get() [3/4]

template<typename T >

T& ome::files::MetadataMap::get | ( | const key_type & | key | ) |
| inline

Get a reference to the value of a particular key from the map.

If the key was not found, or the type of `value` does not match the stored value type, `value` will remain unmodified.

Parameters

  key | the key to find.

Returns
  a reference to the stored value.

Exceptions

  boost::bad_get | on failure if the key was not found or if the type did not match the stored value type.

## § get() [4/4]

template<typename T >

const T& ome::files::MetadataMap::get | ( | const key_type & | key | ) | const
| inline

Get a reference to the value of a particular key from the map.

If the key was not found, or the type of `value` does not match the stored value type, `value` will remain unmodified.

Parameters

  key | the key to find.

Returns
  a reference to the stored value.

Exceptions

  boost::bad_get | on failure if the key was not found or if the type did not match the stored value type.

## § insert()

std::pair<iterator, bool> ome::files::MetadataMap::insert | ( | map_type::value_type & | value | ) |
| inline

Insert a value into the map.

Note that this method is an alternative to set(), which retains the insert semantics of std::map::insert(), i.e. it will not replace keys which already exist in the map, and so will be a no-op if the key is already present.

Parameters

  value | the value to insert.

Returns
  an iterator to the inserted key, or prexisting key if present, and `true` if the value was inserted, `false` otherwise.

Referenced by merge(), and set().

Here is the caller graph for this function:

## § keys()

std::vector<key_type> ome::files::MetadataMap::keys | ( |  | ) | const
| inline

Get a list of keys in the map.

Note
  This is inefficient, and exists solely for compatibility with the Java implementation. Using the iterator interface directly should be preferred.

Returns
  a sorted list of keys.

References begin(), and end().

## § map() [1/2]

map_type& ome::files::MetadataMap::map | ( |  | ) |
| inline

Get the underlying map.

Returns
  a reference to the map.

References discriminating_map.

Referenced by flatten().

Here is the caller graph for this function:

## § map() [2/2]

const map_type& ome::files::MetadataMap::map | ( |  | ) | const
| inline

Get the underlying map.

Returns
  a reference to the map.

References discriminating_map.

## § merge()

void ome::files::MetadataMap::merge | ( | const MetadataMap & | map,
|  | const std::string & | prefix
| ) |  |
| inline

Merge a separate map into this map.

Parameters

  map | the map to merge.
  prefix | a prefix to append to the keys of the map being merged.

References begin(), end(), flatten(), and insert().

## § operator!=()

bool ome::files::MetadataMap::operator!= | ( | const MetadataMap & | rhs | ) | const
| inline

Compare maps for non-equality.

Parameters

  rhs | the map to compare.

Returns
  `true` if not equal to `rhs`, `false` otherwise.

References discriminating_map.

## § operator<()

bool ome::files::MetadataMap::operator< | ( | const MetadataMap & | rhs | ) | const
| inline

Check if map is less than another map.

Parameters

  rhs | the map to compare.

Returns
  `true` if less than `rhs`, `false` otherwise.

References discriminating_map.

## § operator<=()

bool ome::files::MetadataMap::operator<= | ( | const MetadataMap & | rhs | ) | const
| inline

Check if map is less than or equal to another map.

Parameters

  rhs | the map to compare.

Returns
  `true` if less than or equal to `rhs`, `false` otherwise.

References discriminating_map.

## § operator==()

bool ome::files::MetadataMap::operator== | ( | const MetadataMap & | rhs | ) | const
| inline

Compare maps for equality.

Parameters

  rhs | the map to compare.

Returns
  `true` if equal to `rhs`, `false` otherwise.

References discriminating_map.

## § operator>()

bool ome::files::MetadataMap::operator> | ( | const MetadataMap & | rhs | ) | const
| inline

Check if map is greater than another map.

Parameters

  rhs | the map to compare.

Returns
  `true` if greater than `rhs`, `false` otherwise.

References discriminating_map.

## § operator>=()

bool ome::files::MetadataMap::operator>= | ( | const MetadataMap & | rhs | ) | const
| inline

Check if map is greater than or equal to another map.

Parameters

  rhs | the map to compare.

Returns
  `true` if greater than or equal to `rhs`, `false` otherwise.

References discriminating_map.

## § operator[]()

value_type& ome::files::MetadataMap::operator[] | ( | const key_type & | key | ) |
| inline

Get or set a value by key index.

Access the metadata map as an associative array. This may be used to get or set a value, with the value being created if the key was not already present in the map.

Parameters

  key | the key to retrieve.

Returns
  a reference to the value associated with the `key`.

## § rbegin() [1/2]

reverse_iterator ome::files::MetadataMap::rbegin | ( |  | ) |
| inline

Get a reverse iterator to the end of the map.

Returns
  an iterator.

## § rbegin() [2/2]

const_reverse_iterator ome::files::MetadataMap::rbegin | ( |  | ) | const
| inline

Get a constant reverse iterator to the end of the map.

Returns
  an iterator.

## § rend() [1/2]

reverse_iterator ome::files::MetadataMap::rend | ( |  | ) |
| inline

Get a reverse iterator to the beginning of the map.

Returns
  an iterator.

## § rend() [2/2]

const_reverse_iterator ome::files::MetadataMap::rend | ( |  | ) | const
| inline

Get a constant reverse iterator to the beginning of the map.

Returns
  an iterator.

## § set() [1/2]

void ome::files::MetadataMap::set | ( | const key_type & | key,
|  | const value_type & | value
| ) |  |
| inline

Add a key-value pair to the map.

Note
  If a key by the same already exists in the map, it will be removed and replaced.

Parameters

  key | the key name.
  value | the abstract value.

References end(), erase(), find(), and insert().

Referenced by ome::files::tiff::getCoreMetadata(), ome::files::getOriginalMetadata(), ome::files::detail::MetadataMapFlattenVisitor::operator()(), and ome::files::detail::FormatReader::setId().

Here is the caller graph for this function:

## § set() [2/2]

template<typename T >

void ome::files::MetadataMap::set | ( | const key_type & | key,
|  | const T & | value
| ) |  |
| inline

Add a key-value pair to the map.

Note
  If a key by the same already exists in the map, it will be removed and replaced.

Parameters

  key | the key name.
  value | the value.

## § size()

size_type ome::files::MetadataMap::size | ( |  | ) | const
| inline

Get the size of the map.

Note that vectors are counted as a single item; child elements are not included.

Returns
  the number of elements.

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

- ome/files/MetadataMap.h