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
23namespace odil
24{
25
28{
29public:
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
71private:
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