+BinEntry::~BinEntry()
+{
+ if (BinArea && SelfArea)
+ {
+ delete[] BinArea;
+ BinArea = 0; // let's be carefull !
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Public
+/**
+ * \brief canonical Writer
+ * @param fp already open file pointer
+ * @param filetype type of the file (ACR, ImplicitVR, ExplicitVR, ...)
+*/
+void BinEntry::WriteContent(std::ofstream *fp, FileType filetype)
+{
+ DocEntry::WriteContent(fp, filetype);
+ uint8_t* binArea8 = BinArea; //safe notation
+ size_t lgr = GetLength();
+ if (BinArea) // the binArea was *actually* loaded
+ {
+ /// \todo Probably, the same operation should be done if we wanted
+ /// to write image with Big Endian Transfer Syntax,
+ /// while working on Little Endian Processor
+
+#if defined(GDCM_WORDS_BIGENDIAN) || defined(GDCM_FORCE_BIGENDIAN_EMULATION)
+ /// \todo FIXME Right now, we only care of Pixels element
+ /// we should deal with *all* the BinEntries
+ /// well not really since we are not interpreting values read...
+
+ // 8 Bits Pixels *are* OB, 16 Bits Pixels *are* OW
+ // -value forced while Reading process-
+ if (GetGroup() == 0x7fe0 && GetVR() == "OW")
+ {
+ uint16_t *binArea16 = (uint16_t*)binArea8;
+ binary_write (*fp, binArea16, lgr );
+ }
+ else
+ {
+ // For any other VR, BinEntry is re-written as-is
+ binary_write (*fp, binArea8, lgr );
+ }
+#else
+ binary_write ( *fp, binArea8, lgr ); // Elem value
+#endif //GDCM_WORDS_BIGENDIAN
+
+ }
+ else
+ {
+ // nothing was loaded, but we need to skip space on disc
+ fp->seekp(lgr, std::ios::cur);
+ }