version 1.1.2.2, 2009/11/17 11:14:53
|
version 1.6, 2013/02/13 11:39:58
|
|
|
// | // |
////////////////////////////////////////////////////////////////////////// | ////////////////////////////////////////////////////////////////////////// |
// | // |
|
// This code implements part of PEP#348 - The CMPI infrastructure using SCMO |
|
// (Single Chunk Memory Objects). |
|
// The design document can be found on the OpenPegasus website openpegasus.org |
|
// at https://collaboration.opengroup.org/pegasus/pp/documents/21210/PEP_348.pdf |
|
// |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#ifndef Pegasus_SCMOStreamer_h | #ifndef Pegasus_SCMOStreamer_h |
|
|
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
| |
struct SCMOResultionTable |
struct SCMOResolutionTable |
|
{ |
|
// Though we only store pointers here, it is stored as union of size 64bit |
|
// to become independent from 64bit versus 32bit incarnations of the struct. |
|
union |
{ | { |
void* scmbptr; |
Uint64 uint64; |
Uint32 index; |
SCMOInstance* scmoInst; |
|
SCMBInstance_Main * scmbMain; |
|
} scmbptr; |
|
|
|
Uint64 index; |
}; | }; |
| |
#define PEGASUS_ARRAY_T SCMOResultionTable |
#define PEGASUS_ARRAY_T SCMOResolutionTable |
# include <Pegasus/Common/ArrayInter.h> | # include <Pegasus/Common/ArrayInter.h> |
#undef PEGASUS_ARRAY_T | #undef PEGASUS_ARRAY_T |
| |
|
|
// Instances | // Instances |
bool deserialize(); | bool deserialize(); |
| |
|
// Writes a single SCMOClass to the given CIMBuffer |
|
static void serializeClass(CIMBuffer& out, const SCMOClass& scmoClass); |
|
|
|
// Reads a single SCMOClass from the given CIMBuffer |
|
static bool deserializeClass(CIMBuffer& in, SCMOClass& scmoClass); |
|
|
private: | private: |
| |
| |
|
|
// | // |
// Returns the index position at which the instance was inserted in the | // Returns the index position at which the instance was inserted in the |
// instance resolver table. | // instance resolver table. |
Uint32 _appendToInstResolverTable(const SCMOInstance& inst, Uint32 idx); |
Uint32 _appendToInstResolverTable(SCMOInstance& inst, Uint32 idx); |
| |
| |
// Adds an instance to the class resolution table. | // Adds an instance to the class resolution table. |
|
|
// and returns the new index position of the class. | // and returns the new index position of the class. |
Uint32 _appendToClassTable(const SCMOInstance& inst); | Uint32 _appendToClassTable(const SCMOInstance& inst); |
| |
void _putClasses(); |
static void _putClasses(CIMBuffer& out,Array<SCMBClass_Main*>& classTable); |
bool _getClasses(); |
static bool _getClasses(CIMBuffer& in,Array<SCMBClass_Main*>& classTable); |
void _putInstances(); | void _putInstances(); |
bool _getInstances(); | bool _getInstances(); |
| |
|
|
// The array of SCMOInstances to be streamed | // The array of SCMOInstances to be streamed |
Array<SCMOInstance>& _scmoInstances; | Array<SCMOInstance>& _scmoInstances; |
| |
// Counters for the total number of classes and scmo instances |
|
// to be streamed. These counters increase during streaming process. |
|
Uint32 _ttlNumInstances; |
|
Uint32 _ttlNumClasses; |
|
|
|
// Index table used to resolve the absolute pointers to SCMOClasses | // Index table used to resolve the absolute pointers to SCMOClasses |
// to a relative sequence number (index) in the stream | // to a relative sequence number (index) in the stream |
Array<SCMOResultionTable> _clsResolverTable; |
Array<SCMOResolutionTable> _clsResolverTable; |
| |
// Index table used to resolve the absolute pointers to SCMOInstances | // Index table used to resolve the absolute pointers to SCMOInstances |
// to a relative sequence number (index) in the stream | // to a relative sequence number (index) in the stream |
Array<SCMOResultionTable> _instResolverTable; |
Array<SCMOResolutionTable> _instResolverTable; |
| |
// Table of pointers to SCMOClasses to be streamed | // Table of pointers to SCMOClasses to be streamed |
Array<const SCMBClass_Main*> _classTable; |
Array<SCMBClass_Main*> _classTable; |
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |