1 /**
2  *  \file RMF/Category.h
3  *  \brief Handle read/write of Model data from/to files.
4  *
5  *  Copyright 2007-2021 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #include <boost/shared_ptr.hpp>
10 #include <string>
11 
12 #include "RMF/BufferHandle.h"
13 #include "RMF/FileConstHandle.h"
14 #include "RMF/FileHandle.h"
15 #include "RMF/ID.h"
16 #include "RMF/NodeHandle.h"
17 #include "RMF/config.h"
18 #include "RMF/enums.h"
19 #include "RMF/internal/SharedData.h"
20 #include "RMF/internal/shared_data_factories.h"
21 
22 RMF_ENABLE_WARNINGS
23 
24 namespace RMF {
25 
26 FileHandle::FileHandle(boost::shared_ptr<internal::SharedData> shared)
27     : FileConstHandle(shared) {}
FileConstHandle(boost::shared_ptr<internal::SharedData> shared)28 
29 NodeHandle FileHandle::get_node(NodeID id) const {
30   return NodeHandle(id, shared_);
31 }
32 
33 void FileHandle::flush() const {
34   try {
get_description() const35     shared_->flush();
36   }
37   RMF_FILE_CATCH();
38 }
39 
40 void FileHandle::set_description(std::string descr) const {
41   shared_->set_description(descr);
get_producer() const42 }
43 
44 void FileHandle::set_producer(std::string descr) const {
45   shared_->set_producer(descr);
46 }
47 
48 FrameID FileHandle::add_frame(std::string name, FrameType t) const {
get_values(const NodeConstHandles & nodes,FloatKey k,Float missing_value)49   FrameID ret = shared_->add_frame(name, t);
50   return ret;
51 }
52 
53 FrameID FileHandle::add_frame(std::string name, FrameID parent,
54                               FrameType t) const {
55   FrameID ret = shared_->add_frame(name, parent, t);
56   return ret;
57 }
58 
59 NodeHandle FileHandle::add_node(std::string name, NodeType t) const {
open_rmf_file_read_only(std::string path)60   NodeID n = shared_->add_node(name, t);
61   return get_node(n);
62 }
63 
open_rmf_buffer_read_only(BufferConstHandle buffer)64 FileHandle create_rmf_file(std::string path) {
65   return FileHandle(internal::create_file(path));
66 }
67 
get_root_frames() const68 FileHandle create_rmf_buffer(BufferHandle buffer) {
69   return FileHandle(internal::create_buffer(buffer));
70 }
71 
72 } /* namespace RMF */
73 
74 RMF_DISABLE_WARNINGS
75