1 /*
2  *
3  *  Copyright (C) 2002-2010, OFFIS e.V.
4  *  All rights reserved.  See COPYRIGHT file for details.
5  *
6  *  This software and supporting documentation were developed by
7  *
8  *    OFFIS e.V.
9  *    R&D Division Health
10  *    Escherweg 2
11  *    D-26121 Oldenburg, Germany
12  *
13  *
14  *  Module:  dcmimage
15  *
16  *  Author:  Marco Eichelberg
17  *
18  *  Purpose: class DcmQuantPixelBoxArray
19  *
20  */
21 
22 
23 #include "dcmtk/config/osconfig.h"
24 #include "dcmtk/ofstd/ofcast.h"
25 #include "dcmtk/dcmimage/diqtpbox.h"   /* for DcmQuantPixelBoxArray */
26 
27 #ifdef USE_STD_CXX_INCLUDES
28 // Solaris defines qsort() in namespace std, other compilers don't...
29 namespace std { }
30 using namespace std;
31 #endif
32 
33 
34 BEGIN_EXTERN_C
sumcompare(const void * x1,const void * x2)35 static int sumcompare(const void *x1, const void *x2)
36 {
37   return (*(DcmQuantPixelBoxPointer *) x2)->sum
38        - (*(DcmQuantPixelBoxPointer *) x1)->sum;
39 }
40 END_EXTERN_C
41 
42 
sort(unsigned long boxes)43 void DcmQuantPixelBoxArray::sort(unsigned long boxes)
44 {
45 #ifdef DEBUG
46   assert(boxes <= length);
47 #endif
48   qsort(OFreinterpret_cast(char *, array), OFstatic_cast(unsigned int, boxes),  sizeof(DcmQuantPixelBoxPointer), sumcompare);
49 }
50 
51 
DcmQuantPixelBoxArray(unsigned long entries)52 DcmQuantPixelBoxArray::DcmQuantPixelBoxArray(unsigned long entries)
53 : array(NULL)
54 , length(entries)
55 {
56   array = new DcmQuantPixelBoxPointer[entries];
57   for (unsigned long i=0; i<entries; i++) array[i] = new DcmQuantPixelBox();
58 }
59 
60 
~DcmQuantPixelBoxArray()61 DcmQuantPixelBoxArray::~DcmQuantPixelBoxArray()
62 {
63   for (unsigned long i=0; i<length; i++) delete array[i];
64   delete[] array;
65 }
66