windows-nt/Source/XPSP1/NT/net/ias/iasjet/dstore/propbag.h
2020-09-26 16:20:57 +08:00

90 lines
2.1 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//
// 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 <map>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
//
// 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);
// Get all the values.
void get(VARIANT* v) const;
// Replace all the values.
void update(const VARIANT* v)
{
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);
bool getValue(const _bstr_t& name, VARIANT* value) const;
void updateValue(const _bstr_t& name, const VARIANT* value);
};
typedef PropertyBag::value_type Property;
#endif // _PROPBAG_H_