SeqAn3  3.0.3
The Modern C++ library for sequence analysis.
cereal.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2021, 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 
39 #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
47 
60 #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
68 
77 #if SEQAN3_WITH_CEREAL
78 template <typename t>
80 #else
81 template <typename t>
82 SEQAN3_CONCEPT cereal_archive = false;
83 #endif
85 
98 #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
106 
140 #if SEQAN3_WITH_CEREAL
141 template <typename value_t,
142  typename input_archive_t = cereal::BinaryInputArchive,
143  typename output_archive_t = cereal::BinaryOutputArchive>
144 SEQAN3_CONCEPT cerealisable =
145  cereal::traits::is_input_serializable<value_t, input_archive_t>::value &&
146  cereal::traits::is_output_serializable<value_t, output_archive_t>::value;
147 #else
148 template <typename value_t,
149  typename input_archive_t = void,
150  typename output_archive_t = void>
151 SEQAN3_CONCEPT cerealisable = false;
152 #endif
154 
155 } // namespace seqan3
156 
157 namespace seqan3::detail
158 {
159 
164 #if SEQAN3_WITH_CEREAL
165 template <typename type>
166 using strip_cereal_wrapper_t = typename cereal::traits::strip_minimal<std::decay_t<type>>::type;
167 #else
168 template <typename type>
169 using strip_cereal_wrapper_t = type;
170 #endif
171 
172 } // namespace seqan3::detail
All archives of the Cereal library satisfy this.
All input archives of the Cereal library satisfy this.
All output archives of the Cereal library satisfy this.
All text archives of the Cereal library satisfy this.
Specifies the requirements for types that are serialisable via Cereal.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides platform and dependency checks.