Odil
A C++11 library for the DICOM standard
BasicDirectoryCreator.h
Go to the documentation of this file.
1 /*************************************************************************
2  * odil - Copyright (C) Universite de Strasbourg
3  * Distributed under the terms of the CeCILL-B license, as published by
4  * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
5  * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
6  * for details.
7  ************************************************************************/
8 
9 #ifndef _8836a563_24f6_4afb_89ba_377d49ce9f5d
10 #define _8836a563_24f6_4afb_89ba_377d49ce9f5d
11 
12 #include <map>
13 #include <memory>
14 #include <string>
15 #include <utility>
16 #include <vector>
17 
18 #include "odil/DataSet.h"
19 #include "odil/odil.h"
20 #include "odil/Tag.h"
21 #include "odil/Writer.h"
22 
23 namespace odil
24 {
25 
28 {
29 public:
31  typedef std::pair<Tag, int> RecordKey;
32 
34  typedef std::map<std::string, std::vector<RecordKey>> RecordKeyMap;
35 
38 
45  std::string root;
46 
52  std::vector<std::string> files;
53 
56 
59 
62  std::string const & root="",
63  std::vector<std::string> const & files=std::vector<std::string>(),
64  RecordKeyMap const & extra_record_keys=RecordKeyMap(),
66  );
67 
69  void operator()() const;
70 
71 private:
72  struct Record
73  {
74  typedef std::shared_ptr<Record> Pointer;
75 
76  Record()
77  : data_set(std::make_shared<DataSet>())
78  {
79  // Nothing else.
80  }
81 
82  Record(Record const &) = default;
83  Record(Record &&) = default;
84  Record & operator=(Record const &) = default;
85  Record & operator=(Record &&) = default;
86  ~Record() = default;
87 
88  std::shared_ptr<DataSet> data_set;
89  std::map<std::string, Record::Pointer> children;
90  };
91 
92  struct LinearizedTree
93  {
94  std::vector<Record::Pointer> records;
95  std::vector<long> sibling;
96  std::vector<long> child;
97  };
98 
99  typedef std::map<std::string, Record::Pointer> RecordMap;
100 
102  std::map<std::string, Record::Pointer> _create_records() const;
103 
105  Record & _find_record(RecordMap & records, std::string const & key) const;
106 
108  void _fill_record(
109  std::shared_ptr<DataSet const> data_set, Record & record,
110  std::string const & type) const;
111 
113  void _update_record(
114  std::shared_ptr<DataSet const> data_set, Record & record,
115  std::vector<RecordKey> const & keys) const;
116 
118  LinearizedTree _linearize_records(RecordMap const & record_tree) const;
119 
121  std::vector<std::streampos> _get_relative_offsets(
122  std::vector<Record::Pointer> const & records) const;
123 
125  void _write(
126  LinearizedTree const & linearized_tree,
127  std::vector<std::streampos> const & relative_offsets) const;
128 };
129 
130 }
131 
132 #endif // _8836a563_24f6_4afb_89ba_377d49ce9f5d
Write a Basic Directory (i.e. DICOMDIR) object to the disk.
Definition: BasicDirectoryCreator.h:28
static RecordKeyMap const default_record_keys
Default record keys, classified by record type.
Definition: BasicDirectoryCreator.h:37
void operator()() const
Create and write the Basic Directory.
std::vector< std::string > files
Path to the DICOM files, relative to root.
Definition: BasicDirectoryCreator.h:52
Writer::ItemEncoding item_encoding
Encoding of sequence items, defaults to Writer::ItemEncoding::ExplicitLength.
Definition: BasicDirectoryCreator.h:58
std::string root
Root of the DICOM files and location of the output DICOMDIR file.
Definition: BasicDirectoryCreator.h:45
RecordKeyMap extra_record_keys
User-defined record keys, classified by record type.
Definition: BasicDirectoryCreator.h:55
BasicDirectoryCreator(std::string const &root="", std::vector< std::string > const &files=std::vector< std::string >(), RecordKeyMap const &extra_record_keys=RecordKeyMap(), Writer::ItemEncoding item_encoding=Writer::ItemEncoding::ExplicitLength)
Constructor.
std::pair< Tag, int > RecordKey
The tag and its associated type in the record.
Definition: BasicDirectoryCreator.h:31
std::map< std::string, std::vector< RecordKey > > RecordKeyMap
Map from a record type to the extra keys.
Definition: BasicDirectoryCreator.h:34
DICOM Data set.
Definition: DataSet.h:30
ItemEncoding
Encodings of sequence items.
Definition: Writer.h:33
Definition: Association.h:25
#define ODIL_API
Definition: odil.h:28