Flow123d  JS_before_hm-1008-g3dab983
reader_cache.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file reader_cache.hh
15  * @brief
16  */
17 
18 #ifndef READER_CACHE_HH_
19 #define READER_CACHE_HH_
20 
21 
22 #include <map> // for map, map<>::value_compare
23 #include <memory> // for shared_ptr
24 #include <string> // for string
25 #include "system/file_path.hh" // for FilePath
26 #include "system/index_types.hh" // for LongIdx
27 
28 class BaseMeshReader;
29 class Mesh;
30 
31 
32 
33 /**
34  * Auxiliary class to map filepaths to instances of readers.
35  */
36 class ReaderCache {
37 public:
38  struct ReaderData {
39  /// Constructor
41 
42  std::shared_ptr<BaseMeshReader> reader_;
43  std::shared_ptr<Mesh> mesh_;
44  std::shared_ptr<std::vector<LongIdx>> target_mesh_element_map_;
45  };
46 
48 
49  /**
50  * Returns reader of given FilePath.
51  */
52  static std::shared_ptr<BaseMeshReader> get_reader(const FilePath &file_path);
53 
54  /**
55  * Returns mesh of given FilePath.
56  */
57  static std::shared_ptr<Mesh> get_mesh(const FilePath &file_path);
58 
59  /**
60  * Fill element id vectors of reader without checking compatibility.
61  */
62  static void get_element_ids(const FilePath &file_path, const Mesh &mesh);
63 
64  /**
65  * Returns shared vector mapping elements to target mesh.
66  *
67  * Reader and appropriate input data mesh are given by FilePath.
68  * If map is not created method check_compatible_mesh of \p computational_mesh is called.
69  */
70  static std::shared_ptr<std::vector<LongIdx>> get_target_mesh_element_map(const FilePath &file_path, Mesh *computational_mesh);
71 
72 private:
73  /// Returns singleton instance
74  static ReaderCache * instance();
75 
76  /// Constructor
78 
79  /// Returns instance of given FilePath. If reader doesn't exist, creates new ReaderData object.
80  static ReaderTable::iterator get_reader_data(const FilePath &file_path);
81 
82  /// Table of readers
83  ReaderTable reader_table_;
84 };
85 
86 
87 #endif /* READER_CACHE_HH_ */
static void get_element_ids(const FilePath &file_path, const Mesh &mesh)
Definition: reader_cache.cc:73
Definition: mesh.h:78
ReaderCache()
Constructor.
Definition: reader_cache.hh:77
static ReaderCache * instance()
Returns singleton instance.
Definition: reader_cache.cc:31
std::shared_ptr< BaseMeshReader > reader_
Definition: reader_cache.hh:40
static ReaderTable::iterator get_reader_data(const FilePath &file_path)
Returns instance of given FilePath. If reader doesn&#39;t exist, creates new ReaderData object...
Definition: reader_cache.cc:53
std::shared_ptr< std::vector< LongIdx > > target_mesh_element_map_
Definition: reader_cache.hh:44
std::shared_ptr< Mesh > mesh_
Definition: reader_cache.hh:43
Dedicated class for storing path to input and output files.
Definition: file_path.hh:54
ReaderTable reader_table_
Table of readers.
Definition: reader_cache.hh:83
static std::shared_ptr< Mesh > get_mesh(const FilePath &file_path)
Definition: reader_cache.cc:40
static std::shared_ptr< BaseMeshReader > get_reader(const FilePath &file_path)
Definition: reader_cache.cc:36
static std::shared_ptr< std::vector< LongIdx > > get_target_mesh_element_map(const FilePath &file_path, Mesh *computational_mesh)
Definition: reader_cache.cc:79
std::map< string, ReaderData > ReaderTable
Definition: reader_cache.hh:47
ReaderData()
Constructor.
Definition: reader_cache.hh:40