NVBIO
Main Page
Modules
Classes
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
nvbio
trie
suffix_trie.h
Go to the documentation of this file.
1
/*
2
* nvbio
3
* Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
* * Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* * Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
12
* * Neither the name of the NVIDIA CORPORATION nor the
13
* names of its contributors may be used to endorse or promote products
14
* derived from this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
* DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
20
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
*/
27
28
#pragma once
29
30
#include <
nvbio/basic/types.h
>
31
#include <
nvbio/basic/iterator.h
>
32
33
namespace
nvbio {
34
46
49
52
62
enum
TrieType
{
CompressedTrie
,
UncompressedTrie
};
63
76
template
<u
int
32 ALPHABET_SIZE_T, TrieType TYPE_T>
77
struct
TrieNode
78
{
79
const
static
uint32
ALPHABET_SIZE
= ALPHABET_SIZE_T;
80
81
static
const
uint32
invalid_node
=
uint32
(-1);
82
static
const
TrieType
trie_type
= TYPE_T;
83
84
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
85
TrieNode
();
86
87
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
88
TrieNode
(
const
uint32
_child,
const
uint32
_mask);
89
90
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
91
bool
is_leaf
()
const
;
92
93
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
94
uint32
child
()
const
;
95
96
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
97
uint32
child
(
const
uint32
c)
const
;
98
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
99
uint32
nth_child
(
const
uint32
c)
const
;
100
101
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
102
uint32
first_child
()
const
;
103
104
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
105
uint32
mask
()
const
;
106
107
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
108
void
set_child_bit
(
const
uint32
c);
109
110
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
111
uint32
child_bit
(
const
uint32
c)
const
;
112
113
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
114
void
set_size
(
const
uint32
size
);
115
116
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
117
uint32
size
()
const
;
118
119
uint32
m_child
;
120
uint32
m_mask
;
121
uint32
m_size
;
122
};
123
135
template
<TrieType TYPE_T>
136
struct
TrieNode5
137
{
138
const
static
uint32
ALPHABET_SIZE
= 5;
139
140
static
const
uint32
invalid_node
=
uint32
(-1);
141
static
const
TrieType
trie_type
= TYPE_T;
142
143
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
144
TrieNode
();
145
146
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
147
TrieNode
(
const
uint32
_child,
const
uint32
_mask);
148
149
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
150
bool
is_leaf
()
const
;
151
152
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
153
uint32
child
()
const
;
154
155
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
156
uint32
child
(
const
uint32
c)
const
;
157
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
158
uint32
nth_child
(
const
uint32
c)
const
;
159
160
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
161
uint32
first_child
()
const
;
162
163
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
164
uint32
mask
()
const
;
165
166
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
167
void
set_child_bit
(
const
uint32
c);
168
169
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
170
uint32
child_bit
(
const
uint32
c)
const
;
171
172
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
173
void
set_size
(
const
uint32
size
);
174
175
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
176
uint32
size
()
const
;
177
178
uint32
m_child
;
179
uint32
m_mask
:5,
m_size
:27;
180
};
181
184
template
<TrieType TYPE_T>
185
struct
TrieNode
<2,TYPE_T> :
public
TrieNode5
186
{
187
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
188
TrieNode
(
const
uint32
_child,
const
uint32
_mask) :
TrieNode5
( _child, _mask ) {}
189
};
192
template
<TrieType TYPE_T>
193
struct
TrieNode
<3,TYPE_T> :
public
TrieNode5
194
{
195
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
196
TrieNode
(
const
uint32
_child,
const
uint32
_mask) :
TrieNode5
( _child, _mask ) {}
197
};
200
template
<TrieType TYPE_T>
201
struct
TrieNode
<4,TYPE_T> :
public
TrieNode5
202
{
203
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
204
TrieNode
(
const
uint32
_child,
const
uint32
_mask) :
TrieNode5
( _child, _mask ) {}
205
};
208
template
<TrieType TYPE_T>
209
struct
TrieNode
<5,TYPE_T> :
public
TrieNode5
210
{
211
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
212
TrieNode
(
const
uint32
_child,
const
uint32
_mask) :
TrieNode5
( _child, _mask ) {}
213
};
214
215
222
template
<u
int
32 ALPHABET_SIZE_T,
typename
NodeIterator>
223
struct
SuffixTrie
224
{
225
const
static
uint32
ALPHABET_SIZE
= ALPHABET_SIZE_T;
226
227
typedef
typename
std::iterator_traits<NodeIterator>::value_type
node_type
;
228
231
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
232
SuffixTrie
() {}
233
236
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
237
SuffixTrie
(
const
NodeIterator seq);
238
241
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
242
node_type
root
()
const
;
243
255
template
<
typename
Visitor>
256
NVBIO_FORCEINLINE
NVBIO_HOST_DEVICE
257
void
children
(
const
node_type
node, Visitor& visitor)
const
;
258
261
const
NodeIterator&
nodes
()
const
{
return
m_seq; }
262
263
private
:
264
NodeIterator m_seq;
265
};
266
267
304
template
<
typename
TrieType,
typename
NodeVector>
305
void
build_suffix_trie
(
306
const
TrieType
& in_trie,
307
NodeVector& out_nodes);
308
311
312
}
// namespace nvbio
313
314
#include <
nvbio/trie/suffix_trie_inl.h
>
Generated on Wed Feb 25 2015 08:33:04 for NVBIO by
1.8.4