(file) Return to SCMOStreamer.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/SCMOStreamer.h between version 1.1 and 1.2

version 1.1, 2009/11/16 17:07:31 version 1.2, 2009/12/15 11:39:34
Line 0 
Line 1 
   //%LICENSE////////////////////////////////////////////////////////////////
   //
   // Licensed to The Open Group (TOG) under one or more contributor license
   // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   // this work for additional information regarding copyright ownership.
   // Each contributor licenses this file to you under the OpenPegasus Open
   // Source License; you may not use this file except in compliance with the
   // License.
   //
   // Permission is hereby granted, free of charge, to any person obtaining a
   // copy of this software and associated documentation files (the "Software"),
   // to deal in the Software without restriction, including without limitation
   // the rights to use, copy, modify, merge, publish, distribute, sublicense,
   // and/or sell copies of the Software, and to permit persons to whom the
   // Software is furnished to do so, subject to the following conditions:
   //
   // The above copyright notice and this permission notice shall be included
   // in all copies or substantial portions of the Software.
   //
   // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   //
   //////////////////////////////////////////////////////////////////////////
   //
   //%/////////////////////////////////////////////////////////////////////////////
   
   #ifndef Pegasus_SCMOStreamer_h
   #define Pegasus_SCMOStreamer_h
   
   #include <Pegasus/Common/Config.h>
   #include <Pegasus/Common/ArrayInternal.h>
   #include <Pegasus/Common/SCMO.h>
   #include <Pegasus/Common/SCMOInstance.h>
   #include <Pegasus/Common/CIMBuffer.h>
   #include <Pegasus/Common/Array.h>
   
   PEGASUS_NAMESPACE_BEGIN
   
   
   struct SCMOResolutionTable
   {
       // Though we really store a pointer here, it is stored as Uint64 to
       // become independent from 64bit versus 32bit incarnations of the struct.
       Uint64 scmbptr;
       Uint32 index;
   };
   
   #define PEGASUS_ARRAY_T SCMOResolutionTable
   # include <Pegasus/Common/ArrayInter.h>
   #undef PEGASUS_ARRAY_T
   
   
   class PEGASUS_COMMON_LINKAGE SCMOStreamer
   {
   public:
   
       SCMOStreamer(CIMBuffer& out, Array<SCMOInstance>& x);
   
       // Writes the list of SCMOInstances stored in this instance of SCMOStreamer
       // to the output buffer, including their referenced Classes and Instances
       void serialize();
   
       // Reads a list of SCMOInstances from the input buffer and stores them in
       // this instance of SCMOStreamer, including their referenced Classes and
       // Instances
       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:
   
   
   
       // This function takes and instance and adds all of its external
       // references (SCMOClass and SCMOInstances) to the index tables
       // For referenced SCMOInstances, the function recusively calls itself.
       //
       // Returns the index position at which the class for this instance was
       // inserted in the class resolver table.
       Uint32 _appendToResolverTables(const SCMOInstance& inst);
   
   
       // This function adds the given instance to the instance resolver table,
       // which stores the connections between instances and their external
       // references.
       //
       // Returns the index position at which the instance was inserted in the
       // instance resolver table.
       Uint32 _appendToInstResolverTable(const SCMOInstance& inst, Uint32 idx);
   
   
       // Adds an instance to the class resolution table.
       // Also adds the class to the class table when neccessary
       //
       // Returns the index position at which the instance was inserted in the
       // instance resolver table.
       Uint32 _appendToClassResolverTable(const SCMOInstance& inst);
   
   
       // Add the SCMOClass for the given instance to the class table.
       // If the class already exists in the table, it returns the index position
       // for this class, otherwise appends the class at the end of the table
       // and returns the new index position of the class.
       Uint32 _appendToClassTable(const SCMOInstance& inst);
   
       static void _putClasses(CIMBuffer& out,Array<SCMBClass_Main*>& classTable);
       static bool _getClasses(CIMBuffer& in,Array<SCMBClass_Main*>& classTable);
       void _putInstances();
       bool _getInstances();
   
   
   #ifdef PEGASUS_DEBUG
       void _dumpTables();
   #endif
   
       // The Buffer for output streaming
       CIMBuffer& _buf;
   
       // The array of SCMOInstances to be streamed
       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
       // to a relative sequence number (index) in the stream
       Array<SCMOResolutionTable> _clsResolverTable;
   
       // Index table used to resolve the absolute pointers to SCMOInstances
       // to a relative sequence number (index) in the stream
       Array<SCMOResolutionTable> _instResolverTable;
   
       // Table of pointers to SCMOClasses to be streamed
       Array<SCMBClass_Main*> _classTable;
   };
   
   PEGASUS_NAMESPACE_END
   
   #endif /* Pegasus_SCMOStreamer_h */


Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2