SeqAn3  3.0.1
The Modern C++ library for sequence analysis.
cereal.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2020, Knut Reinert & MPI für molekulare Genetik
4 // This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5 // shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6 // -----------------------------------------------------------------------------------------------------
7 
13 #pragma once
14 
15 #include <type_traits>
16 
17 #include <seqan3/core/platform.hpp>
18 
19 #if SEQAN3_WITH_CEREAL
20 #include <cereal/details/traits.hpp>
21 #include <cereal/archives/binary.hpp>
22 #endif
23 
24 namespace seqan3
25 {
26 
38 #if SEQAN3_WITH_CEREAL
40 template <typename t>
41 SEQAN3_CONCEPT cereal_output_archive = std::is_base_of_v<cereal::detail::OutputArchiveBase, t>;
42 #else
43 template <typename t>
44 SEQAN3_CONCEPT cereal_output_archive = false;
45 #endif
46 
59 #if SEQAN3_WITH_CEREAL
61 template <typename t>
62 SEQAN3_CONCEPT cereal_input_archive = std::is_base_of_v<cereal::detail::InputArchiveBase, t>;
63 #else
64 template <typename t>
65 SEQAN3_CONCEPT cereal_input_archive = false;
66 #endif
67 
76 #if SEQAN3_WITH_CEREAL
78 template <typename t>
80 #else
81 template <typename t>
82 SEQAN3_CONCEPT cereal_archive = false;
83 #endif
84 
97 #if SEQAN3_WITH_CEREAL
99 template <typename t>
100 SEQAN3_CONCEPT cereal_text_archive = std::is_base_of_v<cereal::traits::TextArchive, t>;
101 #else
102 template <typename t>
103 SEQAN3_CONCEPT cereal_text_archive = false;
104 #endif
105 
136 #if SEQAN3_WITH_CEREAL
138 template <typename value_t,
139  typename input_archive_t = cereal::BinaryInputArchive,
140  typename output_archive_t = cereal::BinaryOutputArchive>
141 SEQAN3_CONCEPT cerealisable =
142  cereal::traits::is_input_serializable<value_t, input_archive_t>::value &&
143  cereal::traits::is_output_serializable<value_t, output_archive_t>::value;
144 #else
145 template <typename value_t,
146  typename input_archive_t = void,
147  typename output_archive_t = void>
148 SEQAN3_CONCEPT cerealisable = false;
149 #endif
150 
152 } // namespace seqan3
153 
154 namespace seqan3::detail
155 {
156 
161 #if SEQAN3_WITH_CEREAL
162 template <typename type>
163 using strip_cereal_wrapper_t = typename cereal::traits::strip_minimal<std::decay_t<type>>::type;
164 #else
165 template <typename type>
166 using strip_cereal_wrapper_t = type;
167 #endif
168 
169 } // namespace seqan3::detail
cereal_text_archive
All text archives of the Cereal library satisfy this.
cereal_input_archive
All input archives of the Cereal library satisfy this.
seqan3
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:36
cereal_output_archive
All output archives of the Cereal library satisfy this.
platform.hpp
Provides platform and dependency checks.
cereal_archive
All archives of the Cereal library satisfy this.
cerealisable
Specifies the requirements for types that are serialisable via Cereal.