windows-nt/Source/XPSP1/NT/ds/security/csps/cryptoflex/slbcsp/container.h
2020-09-26 16:20:57 +08:00

137 lines
4.5 KiB
C++

// Container.h -- Container class declaration
// (c) Copyright Schlumberger Technology Corp., unpublished work, created
// 1999. This computer program includes Confidential, Proprietary
// Information and is a Trade Secret of Schlumberger Technology Corp. All
// use, disclosure, and/or reproduction is prohibited unless authorized
// in writing. All Rights Reserved.
#if !defined(SLBCSP_CONTAINER_H)
#define SLBCSP_CONTAINER_H
#include <string>
#include <stack>
#include <cciCont.h>
#include "slbRCPtr.h"
#include "CachingObj.h"
#include "cspec.h"
// Forward declaration necessary to satisfy HContainer's declaration
class Container;
class HContainer
: public slbRefCnt::RCPtr<Container>
{
public:
// Types
// C'tors/D'tors
HContainer(Container *pacntr = 0);
// Operators
// Operations
// Access
// Predicates
protected:
// Types
// C'tors/D'tors
// Operators
// Operations
// Access
// Predicates
// Variables
private:
// Types
// C'tors/D'tors
// Operators
// Operations
// Access
// Predicates
// Variables
};
// Container is a reference counted wrapper to a CCI
//
// One unique CCI container is maintained for all threads since
// the CCI does not reflect changes made to one CContainer in all
// CContainer objects that refer to the same container.
//
// The container cannot be created unless the container
// it represents is exists on the card.
class Container
: public slbRefCnt::RCObject,
public CachingObject
{
public:
// Types
// Friends
// C'tors/D'tors
static HContainer
MakeContainer(CSpec const & rcspec,
cci::CContainer const &rccntr);
~Container();
// Operators
// Operations
void
ClearCache();
// Access
virtual cci::CContainer
TheCContainer() const;
static HContainer
Find(CSpec const &rKey);
CSpec const &
TheCSpec() const;
// Predicates
protected:
// Types
// C'tors/D'tors
Container(); //Default c'tor
// Operators
// Operations
// Variables
cci::CContainer mutable m_hcntr; // cached container
private:
// Types
// C'tors/D'tors
explicit
Container(CSpec const &rKey);
explicit
Container(CSpec const &rKey,
cci::CContainer const &rccard);
// Operators
// Operations
// Access
// Predicates
// Variables
// The card could be derived from the CCI container object but
// since the CCI allows card objects to be reused, the card may
// not be the container originally found. The CardContext class
// tries to mitigate that problem by storing an HCardContext in a
// container's context object.
CSpec m_cspec;
};
#endif // SLBCSP_CONTAINER_H