cuSBF
Loading...
Searching...
No Matches
include
cusbf
detail
query_layout.cuh
Go to the documentation of this file.
1
#pragma once
2
3
#include <span>
4
#include <vector>
5
6
#include <cstddef>
7
#include <cstdint>
8
#include <
cusbf/device_span.cuh
>
9
#include <
cusbf/normalized_record_batch.hpp
>
10
11
namespace
cusbf::detail
{
12
13
struct
QueryLayoutRecord
{
14
uint64_t
record_index
{};
15
uint64_t
input_offset
{};
16
uint64_t
size
{};
17
uint64_t
valid_kmers
{};
18
uint64_t
hit_offset
{};
19
uint64_t
hit_count
{};
20
};
21
22
class
QueryLayout
{
23
public
:
24
[[
nodiscard
]] std::span<const QueryLayoutRecord>
records
()
const
noexcept
{
25
return
std::span<const QueryLayoutRecord>{records_.data(), records_.size()};
26
}
27
28
[[
nodiscard
]]
uint64_t
total_hit_count
()
const
noexcept
{
29
return
total_hit_count_;
30
}
31
32
[[
nodiscard
]] std::span<const uint8_t>
33
hits_for_record
(std::span<const uint8_t> hits,
size_t
layout_index
)
const
noexcept
{
34
const
QueryLayoutRecord
&
record
= records_[
layout_index
];
35
return
std::span<const uint8_t>{
36
hits.data() +
static_cast<
ptrdiff_t
>
(
record
.hit_offset),
37
static_cast<
size_t
>
(
record
.hit_count)
38
};
39
}
40
41
template
<
typename
Config>
42
[[
nodiscard
]]
static
QueryLayout
build
(std::span<const NormalizedRecord>
records
) {
43
QueryLayout
layout
;
44
layout
.records_.reserve(
records
.size());
45
46
uint64_t
logical_size
= 0;
47
for
(
const
NormalizedRecord
&
record
:
records
) {
48
if
(
logical_size
!= 0) {
49
const
uint64_t
remainder
=
logical_size
%
Config::symbolWidth
;
50
if
(
remainder
!= 0) {
51
logical_size
+=
Config::symbolWidth
-
remainder
;
52
}
53
logical_size
+=
Config::symbolWidth
;
54
}
55
56
const
uint64_t
hit_count =
record_kmer_count<Config>
(
record
.size);
57
layout
.records_.push_back(
58
QueryLayoutRecord
{
59
record
.
record_index
,
60
record
.input_offset,
61
record
.size,
62
record
.valid_kmers,
63
logical_size
/
Config::symbolWidth
,
64
hit_count,
65
}
66
);
67
logical_size
+=
record
.size;
68
}
69
70
layout
.total_hit_count_ =
record_kmer_count<Config>
(
logical_size
);
71
return
layout
;
72
}
73
74
private
:
75
std::vector<QueryLayoutRecord> records_{};
76
uint64_t
total_hit_count_{};
77
};
78
79
}
// namespace cusbf::detail
cusbf::detail::QueryLayout
Definition
query_layout.cuh:22
cusbf::detail::QueryLayout::hits_for_record
std::span< const uint8_t > hits_for_record(std::span< const uint8_t > hits, size_t layout_index) const noexcept
Definition
query_layout.cuh:33
cusbf::detail::QueryLayout::build
static QueryLayout build(std::span< const NormalizedRecord > records)
Definition
query_layout.cuh:42
cusbf::detail::QueryLayout::records
std::span< const QueryLayoutRecord > records() const noexcept
Definition
query_layout.cuh:24
cusbf::detail::QueryLayout::total_hit_count
uint64_t total_hit_count() const noexcept
Definition
query_layout.cuh:28
device_span.cuh
cusbf::detail
Definition
Alphabet.cuh:11
cusbf::detail::separatorPositionAlwaysEncodesInvalid
consteval bool separatorPositionAlwaysEncodesInvalid(char *input, uint64_t separatorPosition, uint64_t index)
Recursively tests whether placing the separator byte at any position in an input of valid bytes alway...
Definition
Alphabet.cuh:37
normalized_record_batch.hpp
cusbf::Config::symbolWidth
static constexpr uint64_t symbolWidth
Input bytes per symbol.
Definition
config.cuh:49
cusbf::NormalizedRecord
Per-record metadata inside a normalized record batch.
Definition
normalized_record_batch.hpp:20
cusbf::detail::QueryLayoutRecord
Definition
query_layout.cuh:13
cusbf::detail::QueryLayoutRecord::size
uint64_t size
Definition
query_layout.cuh:16
cusbf::detail::QueryLayoutRecord::hit_count
uint64_t hit_count
Definition
query_layout.cuh:19
cusbf::detail::QueryLayoutRecord::record_index
uint64_t record_index
Definition
query_layout.cuh:14
cusbf::detail::QueryLayoutRecord::input_offset
uint64_t input_offset
Definition
query_layout.cuh:15
cusbf::detail::QueryLayoutRecord::hit_offset
uint64_t hit_offset
Definition
query_layout.cuh:18
cusbf::detail::QueryLayoutRecord::valid_kmers
uint64_t valid_kmers
Definition
query_layout.cuh:17
Generated by
1.9.8