Details
-
Type:
Story
-
Status: Done
-
Resolution: Done
-
Fix Version/s: None
-
Labels:
-
Story Points:9
-
Epic Link:
-
Sprint:AP F18-4, AP F18-5, AP F18-6
-
Team:Alert Production
Description
The C++11 containers unordered_set and unordered_map only work with hashable types, a concept that was itself added in C++11. Most afw value types were implemented before we adopted C++11, and therefore do not have a specialization of std::hash. Implementing std::hash will also make it easier to implement DM-7621, as the C++11 requirements for hash are stricter than the Python requirements.
In most cases, hash can be quickly implemented by adopting a modified version of the algorithm from Effective Java, Item 9; the only difference between the C++ requirements and the Java ones is that hash functions are implied to be strictly deterministic before C++14, but the EffJ algorithm meets that criterion if the hash for all member variables does.
The classes covered by this ticket are a subset (possibly taken from DM-9936) of the following types:
- afw::cameraGeom::CameraPoint
- afw::cameraGeom::CameraSys
- afw::cameraGeom::CameraSysPrefix
- afw::cameraGeom::Orientation
- afw::coord::Coord and its subclasses
- afw::coord::Observatory
- afw::coord::Weather
- afw::detection::Threshold
- afw::geom::Angle
- afw::geom::AngleUnit
- afw::geom::Box
- afw::geom::CoordinateBase and its subclasses
- afw::geom::CoordinateExpr
- afw::geom::Span
- afw::geom::SpherePoint
- afw::geom::polygon::Polygon
- afw::image::Calib
- afw::image::Color
- afw::image::DefectBase
- afw::image::Filter
- afw::image::FilterProperty
- afw::math::FitResults
- afw::math::Function and its subclasses
- afw::math::MaskedVector
- afw::math::Statistics
- afw::table::BaseRecord and its subclasses
- afw::table::ConstFunctorKey
- afw::table::FieldBase and its subclasses
- afw::table::InputFunctorKey and its subclasses
- afw::table::KeyBase and its subclasses
- afw::table::Match
- afw::table::OutputFunctorKey and its subclasses
- afw::table::ReferenceFunctorKey
- afw::table::SchemaItem
- afw::table::io::Persistable
- afw::table::io::PersistableFacade
Attachments
Issue Links
- relates to
-
DM-7621 Immutable afw objects should have __hashable__
- Won't Fix
The documentation for afw::cameraGeom has requested that CameraSys be hashable in C++.