1 #ifndef SEQ_VECTOR_CVT_GEN__HPP
2 #define SEQ_VECTOR_CVT_GEN__HPP
37 template<
class DstIter,
class SrcCont>
40 const SrcCont& srcCont,
size_t srcPos)
42 typename SrcCont::const_iterator src = srcCont.begin() + srcPos;
43 for ( DstIter end(dst + count); dst != end; ++dst ) {
44 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
52 template<
class DstIter,
class SrcCont>
55 const SrcCont& srcCont,
size_t srcPos,
58 typename SrcCont::const_iterator src = srcCont.begin() + srcPos;
59 for ( DstIter end(dst + count); dst != end; ++dst ) {
60 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
63 *dst =
table[c & 0xff];
68 template<
class DstIter,
class SrcCont>
71 const SrcCont& srcCont,
size_t srcPos)
74 typename SrcCont::const_iterator src = srcCont.begin() + srcPos;
75 for ( DstIter end(dst + count); dst != end; ++dst ) {
76 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
83 template<
class DstIter,
class SrcCont>
86 const SrcCont& srcCont,
size_t srcPos,
90 typename SrcCont::const_iterator src = srcCont.begin() + srcPos;
91 for ( DstIter end(dst + count); dst != end; ++dst ) {
92 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
94 *dst =
table[c & 0xff];
99 template<
class DstIter,
class SrcCont>
101 const SrcCont& srcCont,
size_t srcPos)
103 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 2;
106 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
113 for ( DstIter end(dst + (count & ~1)); dst != end; dst += 2 ) {
114 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
117 *dst = (c >> 4) & 0x0f;
118 dst[1] = (c ) & 0x0f;
122 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
124 *dst = (c >> 4) & 0x0f;
129 template<
class DstIter,
class SrcCont>
131 const SrcCont& srcCont,
size_t srcPos,
134 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 2;
137 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
140 *dst =
table[(c ) & 0x0f];
144 for ( DstIter end(dst + (count & ~1)); dst != end; dst += 2 ) {
145 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
148 *dst =
table[(c >> 4) & 0x0f];
149 dst[1] =
table[(c ) & 0x0f];
153 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
155 *dst =
table[(c >> 4) & 0x0f];
160 template<
class DstIter,
class SrcCont>
162 const SrcCont& srcCont,
size_t srcPos)
165 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 2;
168 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
170 *dst = (c >> 4) & 0x0f;
174 for ( DstIter end(dst + (count & ~1)); dst != end; dst += 2 ) {
175 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
178 dst[1] = (c >> 4) & 0x0f;
182 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
189 template<
class DstIter,
class SrcCont>
191 const SrcCont& srcCont,
size_t srcPos,
195 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 2;
198 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
200 *dst =
table[(c >> 4) & 0x0f];
204 for ( DstIter end(dst + (count & ~1)); dst != end; dst += 2 ) {
205 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
207 *dst =
table[(c ) & 0x0f];
208 dst[1] =
table[(c >> 4) & 0x0f];
212 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
214 *dst =
table[(c ) & 0x0f];
219 template<
class DstIter,
class SrcCont>
221 const SrcCont& srcCont,
size_t srcPos)
223 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 4;
224 size_t first_byte_pos = srcPos % 4;
225 if ( first_byte_pos ) {
227 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
230 if ( first_byte_pos <= 1 ) {
231 *dst = (c >> 4) & 0x03;
232 if ( --count == 0 )
return;
235 if ( first_byte_pos <= 2 ) {
236 *dst = (c >> 2) & 0x03;
237 if ( --count == 0 )
return;
244 for ( DstIter end = dst + (count & ~3); dst != end; dst += 4 ) {
245 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
248 char c0 = char(c3 >> 6);
249 char c1 = char(c3 >> 4);
250 char c2 = char(c3 >> 2);
261 size_t last_byte_count = count % 4;
262 if ( last_byte_count ) {
263 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
265 *dst = (c >> 6) & 0x03;
266 if ( last_byte_count >= 2 ) {
267 dst[1] = (c >> 4) & 0x03;
268 if ( last_byte_count >= 3 ) {
269 dst[2] = (c >> 2) & 0x03;
276 template<
class DstIter,
class SrcCont>
278 const SrcCont& srcCont,
size_t srcPos,
281 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 4;
282 size_t first_byte_pos = srcPos % 4;
283 if ( first_byte_pos ) {
285 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
288 if ( first_byte_pos <= 1 ) {
289 *dst =
table[(c >> 4) & 0x03];
290 if ( --count == 0 )
return;
293 if ( first_byte_pos <= 2 ) {
294 *dst =
table[(c >> 2) & 0x03];
295 if ( --count == 0 )
return;
298 *dst =
table[(c ) & 0x03];
302 for ( DstIter end = dst + (count & ~3); dst != end; dst += 4 ) {
303 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
306 char c0 = char(c3 >> 6);
307 char c1 = char(c3 >> 4);
308 char c2 = char(c3 >> 2);
309 c0 =
table[c0 & 0x03];
310 c1 =
table[c1 & 0x03];
312 c2 =
table[c2 & 0x03];
314 c3 =
table[c3 & 0x03];
319 size_t last_byte_count = count % 4;
320 if ( last_byte_count ) {
321 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
323 *dst =
table[(c >> 6) & 0x03];
324 if ( last_byte_count >= 2 ) {
325 dst[1] =
table[(c >> 4) & 0x03];
326 if ( last_byte_count >= 3 ) {
327 dst[2] =
table[(c >> 2) & 0x03];
334 template<
class DstIter,
class SrcCont>
336 const SrcCont& srcCont,
size_t srcPos)
339 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 4;
340 size_t first_byte_pos = srcPos % 4;
341 if ( first_byte_pos ) {
343 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
345 if ( first_byte_pos >= 3 ) {
346 *dst = (c >> 2) & 0x03;
347 if ( --count == 0 )
return;
350 if ( first_byte_pos >= 2 ) {
351 *dst = (c >> 3) & 0x03;
352 if ( --count == 0 )
return;
355 *dst = (c >> 6) & 0x03;
359 for ( DstIter end = dst + (count & ~3); dst != end; dst += 4 ) {
360 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
362 char c1 = char(c0 >> 2);
363 char c2 = char(c0 >> 4);
364 char c3 = char(c0 >> 6);
375 size_t last_byte_count = count % 4;
376 if ( last_byte_count ) {
377 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
380 if ( last_byte_count >= 2 ) {
381 dst[1] = (c >> 2) & 0x03;
382 if ( last_byte_count >= 3 ) {
383 dst[2] = (c >> 4) & 0x03;
390 template<
class DstIter,
class SrcCont>
392 const SrcCont& srcCont,
size_t srcPos,
396 typename SrcCont::const_iterator src = srcCont.begin() + srcPos / 4;
397 size_t first_byte_pos = srcPos % 4;
398 if ( first_byte_pos ) {
400 _ASSERT(src >= srcCont.begin() && src < srcCont.end());
402 if ( first_byte_pos >= 3 ) {
403 *dst =
table[(c >> 2) & 0x03];
404 if ( --count == 0 )
return;
407 if ( first_byte_pos >= 2 ) {
408 *dst =
table[(c >> 4) & 0x03];
409 if ( --count == 0 )
return;
412 *dst =
table[(c >> 6) & 0x03];
416 for ( DstIter end = dst + (count & ~3); dst != end; dst += 4 ) {
417 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
419 char c1 = char(c0 >> 2);
420 char c2 = char(c0 >> 4);
421 char c3 = char(c0 >> 6);
422 c0 =
table[c0 & 0x03];
423 c1 =
table[c1 & 0x03];
425 c2 =
table[c2 & 0x03];
427 c3 =
table[c3 & 0x03];
432 size_t last_byte_count = count % 4;
433 if ( last_byte_count ) {
434 _ASSERT(src > srcCont.begin() && src <= srcCont.end());
436 *dst =
table[(c ) & 0x03];
437 if ( last_byte_count >= 2 ) {
438 dst[1] =
table[(c >> 2) & 0x03];
439 if ( last_byte_count >= 3 ) {
440 dst[2] =
table[(c >> 4) & 0x03];
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
<!DOCTYPE HTML >< html > n< header > n< title > PubSeq Gateway Help Page</title > n< style > n table
void copy_4bit(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos)
void copy_2bit_reverse(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos)
void copy_4bit_table(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos, const char *table)
void copy_2bit_table(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos, const char *table)
void copy_8bit_reverse(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos)
void copy_8bit_table(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos, const char *table)
void copy_2bit_table_reverse(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos, const char *table)
void copy_4bit_reverse(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos)
void copy_4bit_table_reverse(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos, const char *table)
void copy_8bit_table_reverse(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos, const char *table)
void copy_2bit(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos)
void copy_8bit(DstIter dst, size_t count, const SrcCont &srcCont, size_t srcPos)