SDSL 3.0.3
Succinct Data Structure Library
Loading...
Searching...
No Matches
lcp.hpp
Go to the documentation of this file.
1// Copyright (c) 2016, the SDSL Project Authors. All rights reserved.
2// Please see the AUTHORS file for details. Use of this source code is governed
3// by a BSD license that can be found in the LICENSE file.
8#ifndef INCLUDED_SDSL_LCP
9#define INCLUDED_SDSL_LCP
10
11#include <istream>
12#include <type_traits>
13#include <utility>
14
16
17// clang-format off
18// Cyclic includes start
21#include <sdsl/int_vector.hpp>
23#include <sdsl/lcp_bitcompressed.hpp> // type (a)
24#include <sdsl/lcp_byte.hpp> // type (a)
25#include <sdsl/lcp_dac.hpp> // type (a)
26#include <sdsl/lcp_support_sada.hpp> // type (b)
27#include <sdsl/lcp_support_tree.hpp> // type (c)
28#include <sdsl/lcp_support_tree2.hpp> // type (c)
29#include <sdsl/lcp_vlc.hpp> // type (a)
30#include <sdsl/lcp_wt.hpp> // type (a)
31// Cyclic includes end
32// clang-format on
33
35namespace sdsl
36{
37struct cache_config;
38
39// construct lcp arrays
40template <class t_lcp, class t_cst>
41void construct_lcp(t_lcp & lcp, t_cst const & cst, cache_config & config)
42{
43 typename t_lcp::lcp_category tag;
44 construct_lcp(lcp, cst, config, tag);
45}
46
47template <class t_lcp, class t_cst>
48void construct_lcp(t_lcp & lcp, t_cst const &, cache_config & config, lcp_plain_tag)
49{
50 lcp = t_lcp(config);
51}
52
53template <class t_lcp, class t_cst>
54void construct_lcp(t_lcp & lcp, t_cst const & cst, cache_config & config, lcp_permuted_tag)
55{
56 lcp = t_lcp(config, &(cst.csa));
57}
58
59template <class t_lcp, class t_cst>
60void construct_lcp(t_lcp & lcp, t_cst const & cst, cache_config & config, lcp_tree_compressed_tag)
61{
62 lcp = t_lcp(config, &cst);
63}
64
65template <class t_lcp, class t_cst>
66void construct_lcp(t_lcp & lcp, t_cst const & cst, cache_config & config, lcp_tree_and_lf_compressed_tag)
67{
68 lcp = t_lcp(config, &cst);
69}
70
71// copy lcp arrays
72template <class t_lcp, class t_cst>
73void copy_lcp(t_lcp & lcp, t_lcp const & lcp_c, t_cst const & cst)
74{
75 typename t_lcp::lcp_category tag;
76 copy_lcp(lcp, lcp_c, cst, tag);
77}
78
79template <class t_lcp, class t_cst>
80void copy_lcp(t_lcp & lcp, t_lcp const & lcp_c, t_cst const &, lcp_plain_tag)
81{
82 lcp = lcp_c;
83}
84
85template <class t_lcp, class t_cst>
86void copy_lcp(t_lcp & lcp, t_lcp const & lcp_c, t_cst const & cst, lcp_permuted_tag)
87{
88 lcp = lcp_c;
89 lcp.set_csa(&(cst.csa));
90}
91
92template <class t_lcp, class t_cst>
93void copy_lcp(t_lcp & lcp, t_lcp const & lcp_c, t_cst const & cst, lcp_tree_compressed_tag)
94{
95 lcp = lcp_c;
96 lcp.set_cst(&cst);
97}
98
99template <class t_lcp, class t_cst>
100void copy_lcp(t_lcp & lcp, t_lcp const & lcp_c, t_cst const & cst, lcp_tree_and_lf_compressed_tag)
101{
102 lcp = lcp_c;
103 lcp.set_cst(&cst);
104}
105
106// move lcp arrays
107template <class t_lcp, class t_cst>
108void move_lcp(t_lcp && lcp, t_lcp && lcp_c, t_cst const & cst)
109{
110 typename std::remove_reference<t_lcp>::type::lcp_category tag;
111 move_lcp(std::forward<t_lcp>(lcp), std::forward<t_lcp>(lcp_c), cst, tag);
112}
113
114template <class t_lcp, class t_cst>
115void move_lcp(t_lcp && lcp, t_lcp && lcp_c, t_cst const &, lcp_plain_tag)
116{
117 lcp = std::move(lcp_c);
118}
119
120template <class t_lcp, class t_cst>
121void move_lcp(t_lcp && lcp, t_lcp && lcp_c, t_cst const & cst, lcp_permuted_tag)
122{
123 lcp = std::move(lcp_c);
124 lcp.set_csa(&(cst.csa));
125}
126
127template <class t_lcp, class t_cst>
128void move_lcp(t_lcp && lcp, t_lcp && lcp_c, t_cst const & cst, lcp_tree_compressed_tag)
129{
130 lcp = std::move(lcp_c);
131 lcp.set_cst(&cst);
132}
133
134template <class t_lcp, class t_cst>
135void move_lcp(t_lcp && lcp, t_lcp && lcp_c, t_cst const & cst, lcp_tree_and_lf_compressed_tag)
136{
137 lcp = std::move(lcp_c);
138 lcp.set_cst(&cst);
139}
140
141// load lcp arrays
142template <class t_lcp, class t_cst>
143void load_lcp(t_lcp & lcp, std::istream & in, t_cst const & cst)
144{
145 typename t_lcp::lcp_category tag;
146 load_lcp(lcp, in, cst, tag);
147}
148
149template <class t_lcp, class t_cst>
150void load_lcp(t_lcp & lcp, std::istream & in, t_cst const &, lcp_plain_tag)
151{
152 lcp.load(in);
153}
154
155template <class t_lcp, class t_cst>
156void load_lcp(t_lcp & lcp, std::istream & in, t_cst const & cst, lcp_permuted_tag)
157{
158 lcp.load(in, &(cst.csa));
159}
160
161template <class t_lcp, class t_cst>
162void load_lcp(t_lcp & lcp, std::istream & in, t_cst const & cst, lcp_tree_compressed_tag)
163{
164 lcp.load(in, &cst);
165}
166
167template <class t_lcp, class t_cst>
168void load_lcp(t_lcp & lcp, std::istream & in, t_cst const & cst, lcp_tree_and_lf_compressed_tag)
169{
170 lcp.load(in, &cst);
171}
172
173// set lcp pointers
174template <class t_lcp, class t_cst>
175void set_lcp_pointer(t_lcp & lcp, t_cst const & cst)
176{
177 typename t_lcp::lcp_category tag;
178 set_lcp_pointer(lcp, cst, tag);
179}
180
181template <class t_lcp, class t_cst>
182void set_lcp_pointer(t_lcp &, t_cst const &, lcp_plain_tag)
183{}
184
185template <class t_lcp, class t_cst>
186void set_lcp_pointer(t_lcp & lcp, t_cst const & cst, lcp_permuted_tag)
187{
188 lcp.set_csa(&(cst.csa));
189}
190
191template <class t_lcp, class t_cst>
192void set_lcp_pointer(t_lcp & lcp, t_cst const & cst, lcp_tree_compressed_tag)
193{
194 lcp.set_cst(&cst);
195}
196
197template <class t_lcp, class t_cst>
198void set_lcp_pointer(t_lcp & lcp, t_cst const & cst, lcp_tree_and_lf_compressed_tag)
199{
200 lcp.set_cst(&cst);
201}
202
203} // end namespace sdsl
204
205// clang-format on
206
207#endif
construct_isa.hpp contains a space and time efficient construction method for the inverse suffix arra...
csa_alphabet_strategy.hpp includes different strategy classes for representing an alphabet of a CSA.
int_vector.hpp contains the sdsl::int_vector class.
lcp_bitcompressed.hpp contains a bitcompressed LCP array.
lcp_byte.hpp contains a (compressed) lcp array.
lcp_dac.hpp contains an implementation of a (compressed) LCP array.
lcp_support_sada.hpp contains a compressed lcp array.
lcp_wt.hpp contains a (compressed) LCP array based on a WT.
Namespace for the succinct data structure library.
void copy_lcp(t_lcp &lcp, t_lcp const &lcp_c, t_cst const &cst)
Definition lcp.hpp:73
void move_lcp(t_lcp &&lcp, t_lcp &&lcp_c, t_cst const &cst)
Definition lcp.hpp:108
void load_lcp(t_lcp &lcp, std::istream &in, t_cst const &cst)
Definition lcp.hpp:143
void set_lcp_pointer(t_lcp &lcp, t_cst const &cst)
Definition lcp.hpp:175
void construct_lcp(t_lcp &lcp, t_cst const &cst, cache_config &config)
Definition lcp.hpp:41
Contains declarations and definitions of data structure concepts.
select_support_mcl.hpp contains classes that support a sdsl::bit_vector with constant time select inf...
Helper class for construction process.
Definition config.hpp:66