]> Creatis software - gdcm.git/blobdiff - src/gdcmHeaderEntry.cxx
Sub-minor std-related fixes... Jpr+Frog
[gdcm.git] / src / gdcmHeaderEntry.cxx
index 0185b9157ce0844e180d81b6b669043a9b9d075b..b445b624d4a6f70fcf3cedf2215c9bfb43a43833 100644 (file)
@@ -3,18 +3,13 @@
 //
 #include "gdcmHeaderEntry.h"
 #include "gdcmTS.h"
+#include "gdcmGlobal.h"
 #include "gdcmUtil.h"
 
-#ifdef GDCM_NO_ANSI_STRING_STREAM
-#  include <strstream>
-#  define  ostringstream ostrstream
-# else
-#  include <sstream>
-#endif
 #include <iomanip> // for std::ios::left, ...
 
 
-#define MAX_SIZE_PRINT_ELEMENT_VALUE 10000
+#define MAX_SIZE_PRINT_ELEMENT_VALUE 64
 
 //-----------------------------------------------------------------------------
 // Constructor / Destructor
  * @param   in Pointer to existing dictionary entry
  */
 gdcmHeaderEntry::gdcmHeaderEntry(gdcmDictEntry* in) {
-       ImplicitVR = false;
-       voidArea = NULL; // unsecure memory area to hold 'non string' values
-       entry = in;
+   ImplicitVR = false;
+   voidArea = NULL; // unsecure memory area to hold 'non string' values
+   entry = in;
 }
 
 //-----------------------------------------------------------------------------
 // Print
+/**
+ * \ingroup gdcmHeaderEntry
+ * \brief   canonical Printer
+ */
 void gdcmHeaderEntry::Print(std::ostream & os) {
    size_t o;
    unsigned short int g, e;
@@ -41,6 +40,7 @@ void gdcmHeaderEntry::Print(std::ostream & os) {
    std::ostringstream s;
    guint32 lgth;
    char greltag[10];  //group element tag
+
    g  = GetGroup();
    e  = GetElement();
    v  = GetValue();
@@ -49,7 +49,7 @@ void gdcmHeaderEntry::Print(std::ostream & os) {
    sprintf(greltag,"%04x|%04x ",g,e);           
    s << greltag ;
        
-   d2 = _CreateCleanString(v);  // replace non printable characters by '.'
+   d2 = CreateCleanString(v);  // replace non printable characters by '.'
    if (printLevel>=2) { 
       s << "lg : ";
       lgth = GetReadLength(); // ReadLength, as opposed to UsableLength
@@ -79,7 +79,7 @@ void gdcmHeaderEntry::Print(std::ostream & os) {
 
    if (printLevel>=1) {      
       s.setf(std::ios::left);
-      s << std::setw(66-GetName().length()) << " ";             
+      s << std::setw(66-GetName().length()) << " ";
    }
     
    s << "[" << GetName()<< "]";
@@ -98,7 +98,7 @@ void gdcmHeaderEntry::Print(std::ostream & os) {
          s << " [gdcm::too long for print (" << GetLength() << ") ]";
    }
    
-   // Display the UID value (instead of displaying the rough code)  
+   // Display the UID value (instead of displaying only the rough code)  
    if (g == 0x0002) {  // Any more to be displayed ?
       if ( (e == 0x0010) || (e == 0x0002) )
          s << "  ==>\t[" << ts->GetValue(v) << "]";
@@ -117,8 +117,12 @@ void gdcmHeaderEntry::Print(std::ostream & os) {
    if ( (vr == "UL") || (vr == "US") || (vr == "SL") || (vr == "SS") ) {
       if (v == "4294967295") // to avoid troubles in convertion 
          sprintf (st," x(ffffffff)");
-      else     
-         sprintf(st," x(%x)",(unsigned long)atof(v.c_str()));
+      else {
+         if ( GetLength() !=0 )        
+            sprintf(st," x(%x)", atoi(v.c_str()));//FIXME
+        else
+         sprintf(st," "); 
+      }
       s << st;
    }
    s << std::endl;
@@ -128,6 +132,23 @@ void gdcmHeaderEntry::Print(std::ostream & os) {
 //-----------------------------------------------------------------------------
 // Public
 
+/**
+ * \ingroup gdcmHeaderEntry
+ * \brief   Gets the full length of the HeaderEntry (not only value length)
+ */
+guint32 gdcmHeaderEntry::GetFullLength(void) {
+   guint32 l;
+   l = GetLength();
+   if ( IsImplicitVR() ) 
+      l = l + 8;  // 2 (gr) + 2 (el) + 4 (lgth) 
+   else    
+      if ( GetVR()=="OB" || GetVR()=="OW" || GetVR()=="SQ" )
+         l = l + 12; // 2 (gr) + 2 (el) + 2 (vr) + 2 (unused) + 4 (lgth)
+      else
+         l = l + 8;  // 2 (gr) + 2 (el) + 2 (vr) + 2 (lgth)
+   return(l);
+}
+
 //-----------------------------------------------------------------------------
 // Protected