+2004-06-24 Jean-Pierre Roux
+FIX : Write - All the Sequences and Sequence Item are now written
+ as 'no length' stuff, and a Sequence Delimitor aor an Item Delimitor
+ is added a the end, when necessary.
+ - A lot of brain-damaged images, that were read correctly are
+ now written correctly
+ - length compatible BinEntry are now loaded correctly
+ (even for odd groups)
+ Note : only Explicit Value Representation was checked.
+ (question : is implicit VR really necessary for gdcm ?)
+
+2004-06-23 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * DEVELOPPER: added a proposition of coding style.
+ * src/gdcmDocEntry.h: removed every inline declaration (for test of
+ coding style).
+
+2004-06-23 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * gdcmDocEntry::PrintCommonPart() and ::WriteCommonPart() removed.
+ Use the gdcmDocEntry::Print() and Write() instead.
+ * src/gdcmDocument.cxx: bug fix.
+
+2004-06-22 Jean-Pierre Roux
+ FIX : gdcmDocument.cxx
+ - Now we do recognize the JpegLossLess format (there was a misstyping in
+ code 'beautyfication' :-(
+ - Now we automaticaticaly load the Luts, if any
+
+2004-06-22 Jean-Pierre Roux
+ In order : to write Sequences, whatever their imbrication level,
+ : to allow user to create his own Sequences
+ a lot of modif where necessary (adding, moving, or virtualising methods)
+
+WARNING : save your own sources *before* cvs up !
+
+ - gdcmBinEntry
+ ADD virtual void Write(FILE *fp, FileType filetype);
+
+ - gdcmDocEntry
+ ADD virtual void Write(FILE *fp, FileType filetype);
+ ADD void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype);
+
+ - gdcmDocEntrySet
+ ADD virtual void Write (FILE *fp, FileType filetype)=0;
+ ADD virtual gdcmDocEntry *GetDocEntryByNumber(guint16 group,guint16 element) = 0;
+ ADD gdcmDocEntry *GetDocEntryByName(std::string name);
+ ADD virtual std::string GetEntryByNumber(guint16 group,guint16 element) = 0;
+ ADD std::string GetEntryByName(TagName name);
+ ADD gdcmDictEntry *NewVirtualDictEntry(guint16 group,
+ guint16 element,
+ std::string vr = "unkn",
+ std::string fourth = "unkn",
+ std::string name = "unkn");
+ ADD gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element);
+ ADD gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element);
+ ADD gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element);
+ ADD gdcmDocEntry *NewDocEntryByName (std::string Name);
+ ADD gdcmDictEntry *GetDictEntryByName (std::string Name);
+ ADD gdcmDictEntry *GetDictEntryByNumber(guint16, guint16);
+ REM virtual gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element)=0;
+ REM virtual gdcmDocEntry *NewDocEntryByName (std::string Name)=0;
+
+ - gdcmDocument
+ ADD virtual bool WriteF(FileType type); // New stuff, with recursive exploration
+ ADD virtual std::string GetEntryByName (TagName tagName);
+ ADD virtual std::string GetEntryVRByName (TagName tagName);
+ REM virtual bool Write(FILE *, FileType);
+ REM virtual void WriteEntryTagVRLength(gdcmDocEntry *tag,
+ FILE *_fp, FileType type);
+ REM virtual void WriteEntryValue(gdcmDocEntry *tag,FILE *_fp,FileType type);
+ REM virtual bool WriteEntry(gdcmDocEntry *tag,FILE *_fp,FileType type);
+ REM virtual bool WriteEntries(FILE *_fp,FileType type);
+ REM virtual std::string GetEntryByName (std::string tagName);
+ REM virtual std::string GetEntryVRByName (std::string tagName);
+ REM gdcmDictEntry *GetDictEntryByName (std::string Name);
+ REM gdcmDictEntry *GetDictEntryByNumber(guint16, guint16);
+ REM gdcmDictEntry *NewVirtualDictEntry(guint16 group,
+ guint16 element,
+ std::string vr = "unkn",
+ std::string fourth = "unkn",
+ std::string name = "unkn");
+ REM gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element);
+ REM gdcmDocEntry *NewDocEntryByName (std::string Name);
+ REM gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element);
+ REM gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element);
+
+ - gdcmElementSet
+ ADD virtual void Write(FILE *fp, FileType filetype);
+
+ - gdcmSeqEntry
+ ADD virtual void Write(FILE *fp,FileType filetype);
+
+ - gdcmSQItem
+ ADD virtual void Write(FILE *fp, FileType filetype);
+ ADD virtual std::string GetEntryByNumber(guint16 group, guint16 element);
+ REM std::string GetEntryByNumber(guint16 group, guint16 element);
+ REM std::string GetEntryByName(TagName name);
+
+ - gdcmValEntry
+ ADD virtual void gdcmValEntry::Write(FILE *fp, FileType filetype);
+
+2004-06-21 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/TestWriteSimple.cxx: fix to gdcmHeader-gdcmHeaderHelper revamping.
+ The default constructor invoked by the line
+ gdcmHeader *f1 = new gdcmHeader( header );
+ was gdcmHeader::gdcmHeader(bool) instead of the expected
+ gdcmHeader::gdcmHeader(std::string const &, bool = false, bool, bool).
+ Hence the parsing wasn't executed... See also below.
+ * src/gdcmHeader.h: the declaration of gdcmHeader::gdcmHeader(bool)
+ as explicit constructor didn't do the trick to fix the above problem.
+ Could anyone explain why ?
+ * src/gdcmBinEntry.cxx, gdcmValEntry.cxx: gdcmBinEntry::Print() now
+ properly calls gdcmValEntry::Print() (that was weed out from
+ code related to gdcmBinEntry).
+
+2004-06-20 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * In order to fix memory leaks:
+ - Test/TestWriteSimple.cxx: added cleaning of free store through
+ some delete calls.
+ - src/gdcmBinEntry.cxx: fix to avoid SegFault.
+ - src/gdcmDicomDir.[cxx|h]: fixed initialisation in constructor
+ gdcmDicomDir::gdcmDicomDir(bool) [either the constructor itself
+ (through the call to ::AddDicomDirMeta()) or the destructor
+ would crash when deleting uninitialized ::metaElems].
+ - src/gdcmDictEntry.cxx: annotation of ununderstood memory leak.
+ - src/gdcmDocument.cxx:
+ -- ::~gdcmDocument() destructor now cleans up all dictionary entries
+ from dynamic stores.
+ -- ::ParseDES() misplaced deletion of temporary NewDocEntry
+ was causing memory leaks.
+ - src/gdcmSQItem.cxx:
+ -- ::~gdcmSQItem() dummy code cleaned (learned that deletion is
+ cleanly handled with polymophism: sorry but my milage is low).
+ -- ::SetEntryByNumber(string, guint16, guint16) now cleanly allocates
+ a gdcmValENtry, and makes no assumption on type (gdcmDocEntry,
+ gdcmSeqEntry vs gdcmValEntry) of existing entry (when present).
+ This avoids SegFaulting.
+ - src/gdcmSQItem.h: coding style.
+ * Conclusion:
+ - Test/TestWriteSimple still severely sucks. The output image content
+ (when $(GDCMDATA_HOME)/012345.002.050.dcm in input) is brain
+ damaged when displayed with vtkgdcmViewer.
+ - on memory leaks: TestWriteSimple leaks really less (see entry
+ of 2004-06-18 in Changelog file for the call to valgrind).
+ - on segfaults: ctest now passes all the tests but one (no more
+ segfaults).
+ * Erroneous leading white fix:
+ - src/gdcmDict.cxx: getline(from,xxx) doesn't remove the leading
+ white[s] (as opposed to from >> xxx, that removes it [them].
+ - src/gdcmTS.cxx: ditto.
+ - gdcmPython/testSuite.py: dirty related kludge removed.
+ * src/*: remaining references to gdcmParser removed.
+ * src/*[cxx|h]: added copy[way]left header.
+
+
2004-06-18 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
* In order to fix writing of dicom files:
- Test/TestWriteSimple.cxx: a simpler example of writing.