]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.cxx
Obsolete tracker output removed
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCASliceOutput.cxx
index aad494a00f2bab4bf9e919222cdb849a046b906c..c725d3e40cede31972befd81a9b4cd02181ce37a 100644 (file)
@@ -18,6 +18,8 @@
 //***************************************************************************
 
 #include "AliHLTTPCCASliceOutput.h"
+#include "MemoryAssignmentHelpers.h"
+
 
 GPUhd() int AliHLTTPCCASliceOutput::EstimateSize( int nOfTracks, int nOfTrackClusters )
 {
@@ -28,25 +30,62 @@ GPUhd() int AliHLTTPCCASliceOutput::EstimateSize( int nOfTracks, int nOfTrackClu
   return sizeof( AliHLTTPCCASliceOutput ) + sizeof( AliHLTTPCCASliceTrack )*nOfTracks + kClusterDataSize*nOfTrackClusters;
 }
 
-template<typename T> inline void AssignNoAlignment( T *&dst, char *&mem, int count )
+#ifndef HLTCA_GPUCODE
+
+inline void AssignNoAlignment( int &dst, int &size, int count )
 {
   // assign memory to the pointer dst
-  dst = ( T* ) mem;
-  mem = ( char * )( dst + count );
+  dst = size;
+  size = dst + count ;
 }
 
-GPUhd() void AliHLTTPCCASliceOutput::SetPointers()
+void AliHLTTPCCASliceOutput::SetPointers(int nTracks, int nTrackClusters, const outputControlStruct* outputControl)
 {
   // set all pointers
+       if (nTracks == -1) nTracks = fNTracks;
+       if (nTrackClusters == -1) nTrackClusters = fNTrackClusters;
+
+  int size = 0;
 
-  char *mem = &fMemory[0];
-  AssignNoAlignment( fTracks,            mem, fNTracks );
-  AssignNoAlignment( fClusterUnpackedYZ, mem, fNTrackClusters );
-  AssignNoAlignment( fClusterUnpackedX,  mem, fNTrackClusters );
-  AssignNoAlignment( fClusterId,         mem, fNTrackClusters );
-  AssignNoAlignment( fClusterPackedYZ,   mem, fNTrackClusters );
-  AssignNoAlignment( fClusterRow,        mem, fNTrackClusters );
-  AssignNoAlignment( fClusterPackedAmp,  mem, fNTrackClusters );
+  {
+    AssignNoAlignment( fTracksOffset,            size, nTracks*sizeof(AliHLTTPCCASliceTrack) );
+    AssignNoAlignment( fClusterIdOffset,         size, nTrackClusters*sizeof(int) );
+    AssignNoAlignment( fClusterRowOffset,        size, nTrackClusters*sizeof(float) );
+    AssignNoAlignment( fClusterPackedXYZOffset, size, nTrackClusters*sizeof(AliHLTTPCCACompressedCluster) );
+  }
+  
+  char *mem = fMemory + size;
 
+  if ((size_t) (mem - fMemory) + sizeof(AliHLTTPCCASliceOutput) > fMemorySize)
+  {
+    fMemorySize = NULL;
+    //printf("\nINTERNAL ERROR IN AliHLTTPCCASliceOutput MEMORY MANAGEMENT req: %d avail: %d\n", (int) ((size_t) (mem - fMemory) + sizeof(AliHLTTPCCASliceOutput)), (int) fMemorySize);
+  }
 }
 
+void AliHLTTPCCASliceOutput::Allocate(AliHLTTPCCASliceOutput* &ptrOutput, int nTracks, int nTrackHits, outputControlStruct* outputControl)
+{
+       //Allocate All memory needed for slice output
+  const int memsize =  EstimateSize(nTracks, nTrackHits);
+
+  if (outputControl->fOutputPtr)
+  {
+         if (outputControl->fOutputMaxSize < memsize)
+         {
+                  outputControl->fEndOfSpace = 1;
+                 ptrOutput = NULL;
+                 return;
+         }
+       ptrOutput = (AliHLTTPCCASliceOutput*) outputControl->fOutputPtr;
+       outputControl->fOutputPtr += memsize;
+       outputControl->fOutputMaxSize -= memsize;
+  }
+  else
+  {
+    if (ptrOutput) free(ptrOutput);
+       ptrOutput = (AliHLTTPCCASliceOutput*) malloc(memsize);
+  }
+  ptrOutput->SetMemorySize(memsize);
+  ptrOutput->SetPointers(nTracks, nTrackHits, outputControl); // set pointers
+}
+#endif