]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/MUON/AliHLTMUONDataBlockWriter.h
Improving output format of the program.
[u/mrichter/AliRoot.git] / HLT / MUON / AliHLTMUONDataBlockWriter.h
index 73c7e1c9e6f5bf8600f07c46cfeb540c3e9b6af7..3b64410b1bb55b9bf8d9c0f9bae8f5e6cd14b6e3 100644 (file)
@@ -45,7 +45,7 @@
  * variable 'size'. The data block is of type 'block_type', the data block entries
  * are of type 'entries_type' and the data block type code is 'type_code'.
  * The data block can be written in the following way:
- *
+ * \code
  *   void* buffer = somebuffer;
  *   AliHLTUInt32_t size = somebuffer_size;
  *   
@@ -72,9 +72,9 @@
  *      // fill the new entry...
  *      entry.somefield = somevalue;
  *   }
- *
+ * \endcode
  * The slightly slower but safer method is to do the following:
- *
+ * \code
  *   AliHLTMUONDataBlockWriter<block_type, entries_type, type_code>
  *   block(buffer, size);
  *   if (not block.InitCommonHeader())
@@ -93,6 +93,7 @@
  *      // fill the new entry...
  *      entry->somefield = somevalue;
  *   }
+ * \endcode
  */
 template <
        class DataBlockType,
@@ -113,7 +114,7 @@ public:
         */
        AliHLTMUONDataBlockWriter(void* buffer, AliHLTUInt32_t size) :
                fSize(size),
-               fMaxArraySize(size - sizeof(DataBlockType)),
+               fMaxArraySize(size > sizeof(DataBlockType) ? size - sizeof(DataBlockType) : 0),
                fBlock(reinterpret_cast<DataBlockType*>(buffer)),
                fData(reinterpret_cast<DataElementType*>(
                       reinterpret_cast<DataBlockType*>(buffer) + 1
@@ -121,6 +122,33 @@ public:
        {
                assert( buffer != NULL );
        }
+       
+       /**
+        * Copy constructor that performs a shallow copy.
+        * Since this class does not take direct ownership of the buffer, never
+        * allocates or deallocates memory, this can be allowed.
+        */
+       AliHLTMUONDataBlockWriter(const AliHLTMUONDataBlockWriter& writer)
+       {
+               fSize = writer.fSize;
+               fMaxArraySize = writer.fMaxArraySize;
+               fBlock = writer.fBlock;
+               fData = writer.fData;
+       }
+       
+       /**
+        * Assignment operator performs a shallow copy.
+        * This is OK because this class does not take direct ownership of the
+        * output memory buffer.
+        */
+       AliHLTMUONDataBlockWriter& operator = (const AliHLTMUONDataBlockWriter& writer)
+       {
+               fSize = writer.fSize;
+               fMaxArraySize = writer.fMaxArraySize;
+               fBlock = writer.fBlock;
+               fData = writer.fData;
+               return *this;
+       }
 
        /**
         * Initialises the common data block header by setting the type and record