]> Creatis software - gdcm.git/blob - src/gdcmBinEntry.cxx
ENH: Since HandleOutOfGroup0002 need access to the transfer syntax move the method...
[gdcm.git] / src / gdcmBinEntry.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: gdcmBinEntry.cxx,v $
5   Language:  C++
6   Date:      $Date: 2005/01/11 20:49:44 $
7   Version:   $Revision: 1.46 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 #include "gdcmBinEntry.h"
20 #include "gdcmDebug.h"
21
22 #include <fstream>
23 #include <sstream>
24 #include <iostream> // for std::ios_base, since <ios> does not exist on gcc/Solaris
25
26 namespace gdcm 
27 {
28
29 //-----------------------------------------------------------------------------
30 // Constructor / Destructor
31
32 /**
33  * \brief   Constructor from a given BinEntry
34  */
35 BinEntry::BinEntry(DictEntry *e) : ValEntry(e)
36 {
37    BinArea = 0;
38    SelfArea = true;
39 }
40
41 /**
42  * \brief   Constructor from a given BinEntry
43  * @param   e Pointer to existing Doc entry
44  */
45 BinEntry::BinEntry(DocEntry *e) : ValEntry(e->GetDictEntry())
46 {
47    Copy(e);
48 /*   Length     = e->GetLength();
49    ReadLength = e->GetReadLength();
50    ImplicitVR = e->IsImplicitVR();
51    Offset     = e->GetOffset();*/
52
53    //FIXME
54    //SQDepthLevel = e->GetDepthLevel();
55
56    BinArea = 0; // let's be carefull !
57    SelfArea = true;
58 }
59
60 /**
61  * \brief   Canonical destructor.
62  */
63 BinEntry::~BinEntry()
64 {
65    if (BinArea && SelfArea)
66    {
67       delete[] BinArea;
68       BinArea = 0; // let's be carefull !
69    }
70 }
71
72
73 //-----------------------------------------------------------------------------
74 // Print
75 /*
76  * \brief   canonical Printer
77  */
78  
79 void BinEntry::Print(std::ostream &os)
80 {
81    os << "B ";
82    DocEntry::Print(os);
83    std::ostringstream s;
84    void* binArea = GetBinArea();
85    if (binArea)
86    {
87       //s << " [" << GDCM_BINLOADED 
88       s << " [" << GetValue()
89         << "; length = " << GetLength() << "]";
90    }
91    else
92    {
93       if ( GetLength() == 0 )
94       {
95          s << " []";
96       }
97       else 
98       {
99          //s << " [gdcm::Binary data NOT loaded]";
100          s << " [" <<GetValue() << "]";
101       }
102          
103    }
104    os << s.str();
105 }
106
107 /*
108  * \brief   canonical Writer
109  * @param fp already open file pointer
110  * @param filetype type of the file to be written
111 */
112 void BinEntry::WriteContent(std::ofstream *fp, FileType filetype)
113 {
114    DocEntry::WriteContent(fp, filetype);
115    void* binArea = GetBinArea();
116    int lgr = GetLength();
117    if (binArea)
118    {
119       // there is a 'non string' LUT, overlay, etc
120       fp->write ( (char*)binArea, lgr ); // Elem value
121    }
122    else
123    {
124       // nothing was loaded, but we need to skip space on disc
125       fp->seekp(lgr, std::ios::cur);
126    }
127 }
128 //-----------------------------------------------------------------------------
129 // Public
130
131
132 /// \brief Sets the value (non string) of the current Dicom Header Entry
133 void BinEntry::SetBinArea( uint8_t *area, bool self )  
134
135    if (BinArea && SelfArea)
136       delete[] BinArea;
137
138    BinArea = area;
139    SelfArea=self;
140 }
141
142 //-----------------------------------------------------------------------------
143 // Protected
144
145 //-----------------------------------------------------------------------------
146 // Private
147    
148 //-----------------------------------------------------------------------------
149 } // end namespace gdcm