]> Creatis software - gdcm.git/blobdiff - src/gdcmDicomDir.cxx
* DEVELOPPER spread out in Doc/Website/Developpers.html, CodingStyle.html,
[gdcm.git] / src / gdcmDicomDir.cxx
index d686459ee3eaf025a1ca9d3f30201b0a0d7f9781..196156a7d7c8010705cd44eb6d631f88a1dc9509 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDicomDir.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/08/30 16:15:40 $
-  Version:   $Revision: 1.66 $
+  Date:      $Date: 2004/09/24 11:39:21 $
+  Version:   $Revision: 1.69 $
   
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -60,7 +60,7 @@ gdcmDicomDir::gdcmDicomDir()
 /**
  * \brief Constructor Parses recursively the directory and creates the DicomDir
  *        or uses an already built DICOMDIR, depending on 'parseDir' value.
- * @param FileName        name 
+ * @param fileName        name 
  *                      - of the root directory (parseDir = true)
  *                      - of the DICOMDIR       (parseDir = false)
  * @param parseDir boolean
@@ -72,12 +72,11 @@ gdcmDicomDir::gdcmDicomDir()
 gdcmDicomDir::gdcmDicomDir(std::string const & fileName, bool parseDir ):
    gdcmDocument( fileName )
 {
-   // que l'on ai passe un root directory ou un DICOMDIR
-   // et quelle que soit la valeur de parseDir,
-   // on a deja lance gdcmDocument 
+   // Whatever user passed (a root directory or a DICOMDIR)
+   // and whatever the value of parseDir was,
+   // gdcmDocument is already executed
    Initialize();  // sets all private fields to NULL
 
-   // gdcmDocument already executed
    // if user passed a root directory, sure we didn't get anything
 
    if ( TagHT.begin() == TagHT.end() ) // when user passed a Directory to parse
@@ -234,8 +233,8 @@ void gdcmDicomDir::ParseDirectory()
  * @param   argDelete    Argument 
  * \warning In python : the arg parameter isn't considered
  */
-void gdcmDicomDir::SetStartMethod(gdcmMethod *method, void *arg, 
-                                  gdcmMethod *argDelete )
+void gdcmDicomDir::SetStartMethod(gdcmMethod* method, void* arg, 
+                                  gdcmMethodargDelete )
 {
    if( startArg && startMethodArgDelete )
    {
@@ -254,7 +253,7 @@ void gdcmDicomDir::SetStartMethod(gdcmMethod *method, void *arg,
  *          class is destroyed
  * @param   method Method to call to delete the argument
  */
-void gdcmDicomDir::SetStartMethodArgDelete(gdcmMethod *method) 
+void gdcmDicomDir::SetStartMethodArgDelete(gdcmMethodmethod) 
 {
    startMethodArgDelete = method;
 }
@@ -267,8 +266,8 @@ void gdcmDicomDir::SetStartMethodArgDelete(gdcmMethod *method)
  * @param   argDelete    Argument  
  * \warning In python : the arg parameter isn't considered
  */
-void gdcmDicomDir::SetProgressMethod(gdcmMethod *method, void *arg, 
-                                     gdcmMethod *argDelete )
+void gdcmDicomDir::SetProgressMethod(gdcmMethod* method, void* arg, 
+                                     gdcmMethodargDelete )
 {
    if( progressArg && progressMethodArgDelete )
    {
@@ -287,7 +286,7 @@ void gdcmDicomDir::SetProgressMethod(gdcmMethod *method, void *arg,
  *          class is destroyed          
  * @param   method Method to call to delete the argument
  */
-void gdcmDicomDir::SetProgressMethodArgDelete(gdcmMethod *method)
+void gdcmDicomDir::SetProgressMethodArgDelete(gdcmMethodmethod)
 {
    progressMethodArgDelete = method;
 }
@@ -300,8 +299,8 @@ void gdcmDicomDir::SetProgressMethodArgDelete(gdcmMethod *method)
  * @param   argDelete    Argument 
  * \warning In python : the arg parameter isn't considered
  */
-void gdcmDicomDir::SetEndMethod(gdcmMethod *method, void *arg, 
-                                gdcmMethod *argDelete )
+void gdcmDicomDir::SetEndMethod(gdcmMethod* method, void* arg, 
+                                gdcmMethodargDelete )
 {
    if( endArg && endMethodArgDelete )
    {
@@ -320,7 +319,7 @@ void gdcmDicomDir::SetEndMethod(gdcmMethod *method, void *arg,
  *          is destroyed
  * @param   method Method to call to delete the argument
  */
-void gdcmDicomDir::SetEndMethodArgDelete(gdcmMethod *method)
+void gdcmDicomDir::SetEndMethodArgDelete(gdcmMethodmethod)
 {
    endMethodArgDelete = method;
 }
@@ -337,12 +336,12 @@ void gdcmDicomDir::SetEndMethodArgDelete(gdcmMethod *method)
  * @return false only when fail to open
  */
  
-bool gdcmDicomDir::Write(std::string const & fileName) 
+bool gdcmDicomDir::WriteDicomDir(std::string const& fileName) 
 {  
    uint16_t sq[4] = { 0x0004, 0x1220, 0xffff, 0xffff };
    uint16_t sqt[4]= { 0xfffe, 0xe0dd, 0xffff, 0xffff };
 
-   FILE * fp = fopen(fileName.c_str(), "wb");
+   FILE* fp = fopen(fileName.c_str(), "wb");
    if( !fp ) 
    {
       printf("Failed to open(write) File [%s] \n", fileName.c_str());
@@ -354,8 +353,6 @@ bool gdcmDicomDir::Write(std::string const & fileName)
    fwrite(filePreamble,128,1,fp);
    fwrite("DICM",4,1,fp);
    delete[] filePreamble;
-   
- //  UpdateDirectoryRecordSequenceLength(); // TODO (if *really* usefull)
  
    gdcmDicomDirMeta *ptrMeta = GetDicomDirMeta();
    ptrMeta->Write(fp, gdcmExplicitVR);
@@ -431,8 +428,8 @@ void gdcmDicomDir::CreateDicomDirChainedList(std::string const & path)
    }
    // sorts Patient/Study/Serie/
    std::sort(list.begin(), list.end(), gdcmDicomDir::HeaderLessThan );
-   std::string tmp = fileList.GetDirName();
-      
+   
+   std::string tmp = fileList.GetDirName();      
    //for each Header of the chained list, add/update the Patient/Study/Serie/Image info
    SetElements(tmp, list);
    CallEndMethod();
@@ -451,7 +448,7 @@ gdcmDicomDirMeta * gdcmDicomDir::NewMeta()
    { 
       TagDocEntryHT::iterator lastOneButSequence = TagHT.end();
       lastOneButSequence --;
-      // This works because ALL the 'out of Sequence' Tags belong to Meta Elems
+      // ALL the 'out of Sequence' Tags belong to Meta Elems
       // (we skip 0004|1220 [Directory record sequence] )
       for ( TagDocEntryHT::iterator cc  = TagHT.begin(); 
                                     cc != lastOneButSequence;
@@ -470,7 +467,6 @@ gdcmDicomDirMeta * gdcmDicomDir::NewMeta()
    return m;  
 }
 
-
 /**
  * \brief   adds a new Patient (with the basic elements) to a partially created DICOMDIR
  */
@@ -530,7 +526,7 @@ gdcmDicomDirPatient * gdcmDicomDir::NewPatient()
  * \brief   adds to the HTable 
  *          the gdcmEntries (Dicom Elements) corresponding to the given type
  * @param   path full path file name (only used when type = GDCM_DICOMDIR_IMAGE
- * @param   type gdcmObject type to create (GDCM_DICOMDIR_PATIENT,
+ * @param   type gdcmDicomDirObject type to create (GDCM_DICOMDIR_PATIENT,
  *          GDCM_DICOMDIR_STUDY, GDCM_DICOMDIR_SERIE ...)
  * @param   header gdcmHeader of the current file
  */
@@ -908,8 +904,6 @@ void gdcmDicomDir::SetElements(std::string &path, VectDocument &list)
    std::string studCurInstanceUID, studCurID;
    std::string serCurInstanceUID,  serCurID;
 
-   //SetElement( path, GDCM_DICOMDIR_META,NULL); // already done (NewMeta) 
-
    for( VectDocument::iterator it = list.begin();
                               it != list.end(); ++it )
    {
@@ -956,41 +950,7 @@ void gdcmDicomDir::SetElements(std::string &path, VectDocument &list)
  */
 bool gdcmDicomDir::HeaderLessThan(gdcmDocument *header1, gdcmDocument *header2)
 {
-
-std::cout <<header1->GetFileName() << " " << header2->GetFileName() <<std::endl;
    return *header1 < *header2;
 }
 
-/**
- * \brief   Sets the accurate value for the (0x0004,0x1220) element of a DICOMDIR
- */
-void gdcmDicomDir::UpdateDirectoryRecordSequenceLength()
-{
-
-/// \todo FIXME : to go on compiling
-///
-/// to be re written !
-///   int offset = 0;
-///   ListTag::iterator it;
-///   uint16_t gr, el;
-///   std::string vr;
-///   for(it=listEntries.begin();it!=listEntries.end();++it) {
-///      gr = (*it)->GetGroup();
-///      el = (*it)->GetElement();
-///      vr = (*it)->GetVR();      
-///      if (gr !=0xfffe) {
-///         if ( (vr == "OB") || (vr == "OW") || (vr == "SQ") ) {    
-///            offset +=  4; // explicit VR AND OB, OW, SQ : 4 more bytes
-///         }         
-///         offset += 2 + 2 + 4 + (*it)->GetLength(); 
-///      } else {
-///         offset +=  4; // delimiters don't have a value.     
-///      }            
-///   }   
-///   //bool res=SetEntryLengthByNumber(offset, 0x0004, 0x1220); // Hope there is no dupps.
-///    SetEntryLengthByNumber(offset, 0x0004, 0x1220); // Hope there is no dupps.
-///   return;
-///
-}
-
 //-----------------------------------------------------------------------------