modernization of Property
This is a major rewrite of the system of Property classes. Started as the implementation of GAUDI-1214, it continued as a review of IProperty and PropertyMgr, to end up in a complete rewrite (and optimization) of PropertyWithValue.
- Fixes GAUDI-1214
- added missing
declarePropertysignature - added
PropertyHolder(an updatedPropertyMgr) - adapted all properties in Gaudi
- added missing
- improved use of
PropertyHolder- use inheritance instead of composition
- removed ~200 (duplicated) lines of code in GaudiKernel
- optimization of Property (fixes GAUDI-1229)
- use templates and automatic code generation to handle efficiently both value and reference properties
- avoid creation of values on the heap (see GAUDI-1229)
- removed the owned boolean flag
- improved usability of properties (e.g. begin/end wrappers for C++11 loops, increment/decrement operators...)
- deprecated use of C arrays as properties
- merged features of
PropertyWithVerifier,SimplePropertyandSimplePropertyRefintoPropertyWithValue - deduplication of name and doc strings via
boost::string_refand a static storage (see GAUDI-1229)
- use templates and automatic code generation to handle efficiently both value and reference properties
- Fixes GAUDI-1205
- added deprecation warnings in service accessors of
Algorithm(@graven) - renamed
Propertybase class toGaudi::Details::PropertyBaseandPropertyWithValuetoGaudi::Property- added backward compatibility type aliases (but not compatible with forward declarations of
class Property, which should be replaced by#include "GaudiKernel/PropertyFwd.h")
- added backward compatibility type aliases (but not compatible with forward declarations of
- added macro
GAUDI_PROPERTY_v2to allow easy implementation of backward compatible changes in derived projects (e.g. when user code relied onDoublePropertyhaving a verifier) - Fixes GAUDI-1268
The changes are as backward compatible as much as possible (except if you explicitly inherit from SimpleProperty, or you forward declared class Property, which now are typedefs), but must be validated in the experiment frameworks.