-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FEATURE] map_io reader and SAM input.
- Loading branch information
1 parent
0d99ece
commit 6b35140
Showing
18 changed files
with
3,525 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
// ----------------------------------------------------------------------------------------------------- | ||
// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin | ||
// Copyright (c) 2016-2021, Knut Reinert & MPI für molekulare Genetik | ||
// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License | ||
// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md | ||
// ----------------------------------------------------------------------------------------------------- | ||
|
||
/*!\file | ||
* \brief Provides seqan3::add_enum_bitwise_operators. | ||
* \author Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de> | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <type_traits> | ||
|
||
#include <seqan3/core/platform.hpp> | ||
|
||
namespace bio::map_io | ||
{ | ||
/*!\interface seqan3::enum_bitwise_operators | ||
* \brief You can expect these functions on all types that overload seqan3::add_enum_bitwise_operators. | ||
*/ | ||
/*!\name Requirements for seqan3::enum_bitwise_operators | ||
* \relates seqan3::enum_bitwise_operators | ||
* \brief You can expect these member functions. | ||
* \{ | ||
* \fn operator&(t lhs, t rhs) | ||
* \brief Returns the binary `&` operator of lhs and rhs. | ||
* \param lhs First enum. | ||
* \param rhs Second enum. | ||
* | ||
* \returns the binary conjunction of `lhs` and `rhs`. | ||
* | ||
* \fn operator|(t lhs, t rhs) | ||
* \brief Returns the binary `|` operator of lhs and rhs. | ||
* \param lhs First enum. | ||
* \param rhs Second enum. | ||
* | ||
* \returns the binary disjunction of `lhs` and `rhs`. | ||
* | ||
* \fn operator^(t lhs, t rhs) | ||
* \brief Returns the binary `^` operator of lhs and rhs. | ||
* \param lhs First enum. | ||
* \param rhs Second enum. | ||
* | ||
* \returns the binary XOR operation on `lhs` and `rhs`. | ||
* | ||
* \fn operator~(t lhs) | ||
* \brief Returns the binary `~` operator of lhs. | ||
* \param lhs First enum. | ||
* | ||
* \returns the binary NOT operation on `lhs`. | ||
* | ||
* \fn operator&=(t & lhs, t rhs) | ||
* \brief Returns the binary `&=` operator of lhs and rhs. | ||
* \param lhs First enum. | ||
* \param rhs Second enum. | ||
* | ||
* \returns the binary AND assigment on `lhs`. | ||
* | ||
* \fn operator|=(t & lhs, t rhs) | ||
* \brief Returns the binary `|=` operator of lhs and rhs. | ||
* \param lhs First enum. | ||
* \param rhs Second enum. | ||
* | ||
* \returns the binary OR assignment on `lhs`. | ||
* | ||
* \fn operator^=(t & lhs, t rhs) | ||
* \brief Returns the binary `^=` operator of lhs and rhs. | ||
* \param lhs First enum. | ||
* \param rhs Second enum. | ||
* | ||
* \returns the binary XOR assignment on `lhs`. | ||
* \} | ||
*/ | ||
|
||
//!\cond DEV | ||
/*!\brief Set to true for a scoped enum to have binary operators overloaded. | ||
* \ingroup core | ||
* | ||
* \details | ||
* | ||
* If this type trait is specialised for an enum, the binary operators `&`, `|`, `^`, `~`, `&=`, `|=`, `^=` will be | ||
* added and behave just like for ints or unscoped enums. | ||
* | ||
* ### Example | ||
* | ||
* \include test/snippet/core/add_enum_bitwise_operators.cpp | ||
*/ | ||
template <typename t> | ||
constexpr bool add_enum_bitwise_operators = false; | ||
|
||
/*!\name Binary operators for scoped enums | ||
* \brief Perform binary operations like on ints or weak enums. These overloads are available if | ||
* seqan3::add_enum_bitwise_operators is defined for your type. | ||
* \ingroup core | ||
* | ||
* \details | ||
* | ||
* \see seqan3::add_enum_bitwise_operators | ||
* \{ | ||
*/ | ||
template <typename t> | ||
constexpr t operator&(t lhs, t rhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
return static_cast<t>(static_cast<std::underlying_type_t<t>>(lhs) & static_cast<std::underlying_type_t<t>>(rhs)); | ||
} | ||
|
||
template <typename t> | ||
constexpr t operator|(t lhs, t rhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
return static_cast<t>(static_cast<std::underlying_type_t<t>>(lhs) | static_cast<std::underlying_type_t<t>>(rhs)); | ||
} | ||
|
||
template <typename t> | ||
constexpr t operator^(t lhs, t rhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
return static_cast<t>(static_cast<std::underlying_type_t<t>>(lhs) ^ static_cast<std::underlying_type_t<t>>(rhs)); | ||
} | ||
|
||
template <typename t> | ||
constexpr t operator~(t lhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
return static_cast<t>(~static_cast<std::underlying_type_t<t>>(lhs)); | ||
} | ||
|
||
template <typename t> | ||
constexpr t & operator&=(t & lhs, t rhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
lhs = lhs & rhs; | ||
return lhs; | ||
} | ||
|
||
template <typename t> | ||
constexpr t & operator|=(t & lhs, t rhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
lhs = lhs | rhs; | ||
return lhs; | ||
} | ||
|
||
template <typename t> | ||
constexpr t & operator^=(t & lhs, t rhs) noexcept requires std::is_enum_v<t> && add_enum_bitwise_operators<t> | ||
{ | ||
lhs = lhs ^ rhs; | ||
return lhs; | ||
} | ||
//!\} | ||
//!\endcond | ||
|
||
} // namespace bio::map_io |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// ----------------------------------------------------------------------------------------------------- | ||
// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin | ||
// Copyright (c) 2016-2021, Knut Reinert & MPI für molekulare Genetik | ||
// Copyright (c) 2020-2021, deCODE Genetics | ||
// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License | ||
// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md | ||
// ----------------------------------------------------------------------------------------------------- | ||
|
||
/*!\file | ||
* brief Provides the seqan3::format_sam. | ||
* \author Hannes Hauswedell <hannes.hauswedell AT decode.is> | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <string> | ||
#include <vector> | ||
|
||
#include <bio/platform.hpp> | ||
|
||
namespace bio | ||
{ | ||
|
||
/*!\brief The sam format. | ||
* \ingroup format | ||
* | ||
* \details | ||
* | ||
* This is the sam format tag. If you want to read sam files, use bio::map_io::reader, and if you want | ||
* to write sam files, use bio::map_io::writer. | ||
* | ||
* ### Introduction | ||
* | ||
* sam is the de-facto-standard for mapping storage in bionformatics. See the | ||
* [article on wikipedia](todo) for a an in-depth description of the format. | ||
* | ||
* ### Fields | ||
* | ||
* todo | ||
* | ||
* ### Implementation notes | ||
* | ||
* todo | ||
* | ||
*/ | ||
struct sam | ||
{ | ||
//!\brief The valid file extensions for this format; note that you can modify this value. | ||
static inline std::vector<std::string> file_extensions{{"sam"}}; | ||
}; | ||
|
||
} // namespace bio |
Oops, something went wrong.