/////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998, Microsoft Corp. All rights reserved. // // FILE // // propbag.h // // SYNOPSIS // // This file declares the classes PropertyValue, Property, and PropertyBag. // // MODIFICATION HISTORY // // 02/20/1998 Original version. // 03/03/1998 Changed PropertyValue to a vector. // /////////////////////////////////////////////////////////////////////////////// #ifndef _PROPBAG_H_ #define _PROPBAG_H_ #include #include /////////////////////////////////////////////////////////////////////////////// // // CLASS // // PropertyValue // // DESCRIPTION // // This class encapsulates the value portion of a multi-valued property. // /////////////////////////////////////////////////////////////////////////////// class PropertyValue : public std::vector<_variant_t> { public: ////////// // Various constructors. ////////// PropertyValue() { } PropertyValue(const VARIANT* v); PropertyValue(const PropertyValue& val) : _Myt(val) { } // Append a new value to the existing values. void append(const VARIANT* v) throw (_com_error, std::bad_alloc); // Get all the values. void get(VARIANT* v) const throw (_com_error); // Replace all the values. void update(const VARIANT* v) throw (_com_error, std::bad_alloc) { swap(PropertyValue(v)); } }; /////////////////////////////////////////////////////////////////////////////// // // CLASS // // PropertyBag // // DESCRIPTION // // This class implements a generic property bag consisting of (name, value) // pairs. It has a special feature in that it supports multi-valued // attributes. These are put/get as a SafeArray of VARIANT's. // /////////////////////////////////////////////////////////////////////////////// class PropertyBag : public std::map<_bstr_t, PropertyValue> { public: using _Myt::insert; void appendValue(const _bstr_t& name, const VARIANT* value) throw (_com_error, std::bad_alloc); bool getValue(const _bstr_t& name, VARIANT* value) const throw (_com_error); void updateValue(const _bstr_t& name, const VARIANT* value) throw (_com_error, std::bad_alloc); }; typedef PropertyBag::value_type Property; #endif // _PROPBAG_H_