~ubuntu-branches/ubuntu/precise/ncbi-tools6/precise

« back to all changes in this revision

Viewing changes to tools/lookup.h

  • Committer: Bazaar Package Importer
  • Author(s): Aaron M. Ucko
  • Date: 2005-03-27 12:00:15 UTC
  • mfrom: (2.1.2 hoary)
  • Revision ID: james.westby@ubuntu.com-20050327120015-embhesp32nj73p9r
Tags: 6.1.20041020-3
* Fix FTBFS under GCC 4.0 caused by inconsistent use of "static" on
  functions.  (Closes: #295110.)
* Add a watch file, now that we can.  (Upstream's layout needs version=3.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
*
40
40
* Version Creation Date:   10/26/95
41
41
*
42
 
* $Revision: 6.23 $
 
42
* $Revision: 6.34 $
43
43
*
44
44
* File Description: 
45
45
*       Functions that format traditional BLAST output.
54
54
*
55
55
* RCS Modification History:
56
56
* $Log: lookup.h,v $
 
57
* Revision 6.34  2004/02/04 21:54:53  dondosha
 
58
* Macro correction for 12/18 discontiguous template
 
59
*
 
60
* Revision 6.33  2003/01/10 17:48:01  dondosha
 
61
* Corrections in 2 macros
 
62
*
 
63
* Revision 6.32  2002/08/30 15:48:17  dondosha
 
64
* MegaBlastWordFinderDeallocate prototype moved from mblast.h
 
65
*
 
66
* Revision 6.31  2002/05/20 21:28:29  dondosha
 
67
* Tiny correction in macro definitions for the optimal 11/18 discontiguous word template
 
68
*
 
69
* Revision 6.30  2002/05/17 21:39:16  dondosha
 
70
* 1. Added 2 optimal discontiguoutemplates for length 21;
 
71
* 2. Changed the optimal template for length 18
 
72
*
 
73
* Revision 6.29  2002/05/14 22:20:20  dondosha
 
74
* Renamed maximal discontiguous template type into optimal
 
75
*
 
76
* Revision 6.28  2002/04/09 18:19:47  dondosha
 
77
* Changed #ifdefs to conditionals, allowing different discontiguous templates in a single binary
 
78
*
 
79
* Revision 6.27  2002/04/04 21:18:50  dondosha
 
80
* Added more macros to be used by discontiguous megablast
 
81
*
 
82
* Revision 6.26  2002/04/01 22:29:24  dondosha
 
83
* Added pair of parentheses in macro definition
 
84
*
 
85
* Revision 6.25  2002/03/26 21:15:55  dondosha
 
86
* Added macro definitions to allow template length 21
 
87
*
 
88
* Revision 6.24  2002/02/15 23:35:01  dondosha
 
89
* Allow hash table and two templates for megablast
 
90
*
57
91
* Revision 6.23  2001/12/28 20:46:21  dondosha
58
92
* 1. Mega BLAST related parameters moved into a separate structure
59
93
* 2. Environment variables for discontiguous words, etc. changed to options
220
254
/* Largest query length for which diagonal array is to be used in megablast */
221
255
#define MAX_DIAG_ARRAY 100000
222
256
 
223
 
#ifdef WORD_MODEL_MAX
 
257
 
 
258
static const Uint4 crc_table[256] = {
 
259
  0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
 
260
  0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
 
261
  0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
 
262
  0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
 
263
  0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
 
264
  0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
 
265
  0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
 
266
  0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
 
267
  0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
 
268
  0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
 
269
  0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
 
270
  0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
 
271
  0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
 
272
  0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
 
273
  0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
 
274
  0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
 
275
  0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
 
276
  0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
 
277
  0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
 
278
  0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
 
279
  0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
 
280
  0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
 
281
  0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
 
282
  0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
 
283
  0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
 
284
  0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
 
285
  0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
 
286
  0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
 
287
  0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
 
288
  0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
 
289
  0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
 
290
  0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
 
291
  0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
 
292
  0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
 
293
  0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
 
294
  0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
 
295
  0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
 
296
  0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
 
297
  0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
 
298
  0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
 
299
  0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
 
300
  0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
 
301
  0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
 
302
  0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
 
303
  0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
 
304
  0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
 
305
  0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
 
306
  0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
 
307
  0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
 
308
  0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
 
309
  0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
 
310
  0x2d02ef8dL
 
311
};
 
312
 
 
313
#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
 
314
#define CRC_OFFSET 2128831034 /* == ~(2166136261) */
 
315
 
 
316
#define CRC32(crc, buf) crc = CRC_OFFSET; DO1(buf); DO1(buf); DO1(buf); DO1(buf); crc = ~crc;
 
317
 
 
318
#define NUC_MASK 0xfc
 
319
 
 
320
#define PACK_EXTRA_CODE(ecode,val,mask) {ecode = ((ecode<<2) & mask) | val;}
 
321
#define GET_NEXT_PACKED_NUCL(s,n,val) { n = (n-1)&0x03; s = s + (n&(n>>1)&0x01); val = ((*s)>>(n<<1)) & 0x00000003; }
 
322
 
 
323
/* OPTIMAL templates */
 
324
 
224
325
/*   1,110,110,110,110,111 - 12 of 16 */
225
326
/*   1,110,010,110,110,111 - 11 of 16 */
 
327
#define MASK1_OPT       0x0000003f
 
328
#define MASK2_OPT       0x00000f00
 
329
#define MASK3_OPT       0x0003c000
 
330
#define MASK4_12_OPT    0x00f00000
 
331
#define MASK4_11_OPT    0x00300000
 
332
#define MASK5_OPT       0xfc000000
 
333
/* 12 of 16 */
 
334
#define GET_WORD_INDEX_12_16_OPT(n) (((n)&MASK1_OPT) | (((n)&MASK2_OPT)>>2) | (((n)&MASK3_OPT)>>4) | (((n)&MASK4_12_OPT)>>6) | (((n)&MASK5_OPT)>>8))
 
335
/* 11 of 16 */
 
336
#define GET_WORD_INDEX_11_16_OPT(n) (((n)&MASK1_OPT) | (((n)&MASK2_OPT)>>2) | (((n)&MASK3_OPT)>>4) | (((n)&MASK4_11_OPT)>>6) | (((n)&MASK5_OPT)>>10))
 
337
 
226
338
/* 111,010,110,010,110,111 - 12 of 18 */
227
 
/* 111,010,100,110,010,111 - 11 of 18 */
228
 
#define MASK1       0x0000003f
229
 
#define MASK2       0x00000f00
230
 
#define MASK3       0x0003c000
231
 
#define MASK4_12    0x00f00000
232
 
#define MASK4_11    0x00300000
233
 
#define MASK5       0xfc000000
234
 
#define MASK1_18    0x00000003
235
 
#define MASK2_12_18 0x000000f0
236
 
#define MASK2_11_18 0x00000030
237
 
#define MASK3_12_18 0x00000c00
238
 
#define MASK3_11_18 0x00003c00
239
 
#define MASK4_12_18 0x000f0000
240
 
#define MASK4_11_18 0x000c0000
241
 
#define MASK5_18    0x00c00000
242
 
#define MASK6_18    0xfc000000
243
 
/* 12 of 16 */
244
 
#define GET_WORD_INDEX_12_16(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4_12)>>6) | (((n)&MASK5)>>8))
245
 
/* 11 of 16 */
246
 
#define GET_WORD_INDEX_11_16(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4_11)>>6) | (((n)&MASK5)>>10))
 
339
/* 111,010,010,110,010,111 - 11 of 18 */
 
340
#define MASK1_18_OPT    0x00000003
 
341
#define MASK2_12_18_OPT 0x000000f0
 
342
#define MASK2_11_18_OPT 0x00000030
 
343
#define MASK3_11_18_OPT 0x00003c00
 
344
#define MASK3_12_18_OPT 0x00000c00
 
345
#define MASK4_11_18_OPT 0x00030000
 
346
#define MASK4_12_18_OPT 0x000f0000
 
347
#define MASK5_18_OPT    0x00c00000
 
348
#define MASK6_18_OPT    0xfc000000
247
349
/* 12 of 18 */
248
 
#define GET_WORD_INDEX_12_18(n) ((((n)&MASK1_18)<<4) | (((n)&MASK2_12_18)<<2) | ((n)&MASK3_12_18) | (((n)&MASK4_12_18)>>4) | (((n)&MASK5_18)>>6) | (((n)&MASK6_18)>>8))
 
350
#define GET_WORD_INDEX_12_18_OPT(n) ((((n)&MASK1_18_OPT)<<4) | (((n)&MASK2_12_18_OPT)<<2) | ((n)&MASK3_12_18_OPT) | (((n)&MASK4_12_18_OPT)>>4) | (((n)&MASK5_18_OPT)>>6) | (((n)&MASK6_18_OPT)>>8))
249
351
/* 11 of 18 */
250
 
#define GET_WORD_INDEX_11_18(n) ((((n)&MASK1_18)<<4) | (((n)&MASK2_11_18)<<2) | (((n)&MASK3_11_18)>>2) | (((n)&MASK4_11_18)>>6) | (((n)&MASK5_18)>>8) | (((n)&MASK6_18)>>10))
251
 
#define GET_WORD_INDEX(n,b,c) (((~b&~c)&GET_WORD_INDEX_12_16(n)) | ((b&~c)&GET_WORD_INDEX_11_16(n)) | ((~b&c)&GET_WORD_INDEX_12_18(n)) | ((b&c)&GET_WORD_INDEX_11_18(n)))
252
 
#define MASK_EXTRA 0x0000000f
253
 
#endif
254
 
 
255
 
/* 1111,01011010,1111 */
256
 
#ifdef WORD_MODEL_MAX_INFO
257
 
#define MASK1 0x000000ff
258
 
#define MASK2 0x00000c00
259
 
#define MASK3 0x0003c000
260
 
#define MASK4 0x00300000
261
 
#define MASK5 0xff000000
262
 
#define GET_WORD_INDEX(n,b,c) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4)>>6) | (((n)&MASK5)>>8))
263
 
#endif
264
 
 
265
 
/* 110,110,111,110,110,1 */
266
 
#ifdef WORD_MODEL_COD_12
267
 
#define MASK1    0x00000003
268
 
#define MASK2    0x000000f0
269
 
#define MASK3    0x000ffc00
270
 
#define MASK4    0x03c00000
271
 
#define MASK5    0xf0000000
272
 
#define MASK3_11 0x00003c00
273
 
#define MASK4_11 0x000f0000
274
 
#define MASK5_11 0x03c00000
275
 
#define MASK6    0xf0000000
276
 
#define GET_WORD_INDEX_11(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3_11)>>4) | (((n)&MASK4_11)>>6) | (((n)&MASK5_11)>>8) | (((n)&MASK6)>>10))
277
 
#define GET_WORD_INDEX_12(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4)>>6) | (((n)&MASK5)>>8))
278
 
#define GET_WORD_INDEX(n,b,c) (((~b)&GET_WORD_INDEX_12(n)) | ((b)&GET_WORD_INDEX_11(n)))
279
 
#endif
280
 
 
281
 
/* DEFAULT DEFINITIONS HERE */
 
352
#define GET_WORD_INDEX_11_18_OPT(n) ((((n)&MASK1_18_OPT)<<4) | (((n)&MASK2_11_18_OPT)<<2) | (((n)&MASK3_11_18_OPT)>>2) | (((n)&MASK4_11_18_OPT)>>4) | (((n)&MASK5_18_OPT)>>8) | (((n)&MASK6_18_OPT)>>10))
 
353
#define MASK_EXTRA_OPT 0x0000000f
 
354
#define GET_EXTRA_CODE_18_OPT(s) (((*(s+1))<<2) | (*(s+2))) & MASK_EXTRA_OPT
 
355
 
 
356
#define GET_EXTRA_CODE_PACKED_4_18_OPT(s) ((*(s+1))>>4)
 
357
#define GET_EXTRA_CODE_PACKED_18_OPT(s,b,val,ecode) {GET_NEXT_PACKED_NUCL(s,b,ecode); GET_NEXT_PACKED_NUCL(s,b,val); PACK_EXTRA_CODE(ecode, val,MASK_EXTRA_OPT);}
 
358
 
 
359
#define GET_AMBIG_CONDITION_18_OPT(s) (((*(s+1))&NUC_MASK) | ((*(s+2))&NUC_MASK))
 
360
 
 
361
/* 111,010,010,110,010,010,111 - 12 of 21 */
 
362
/* 111,010,010,100,010,010,111 - 11 of 21 */
 
363
#define MASK1_21_OPT    0x00000030
 
364
#define MASK2_12_21_OPT 0x00003c00
 
365
#define MASK2_11_21_OPT 0x00003000
 
366
#define MASK3_21_OPT    0x00030000
 
367
#define MASK4_21_OPT    0x00c00000
 
368
#define MASK5_21_OPT    0xfc000000
 
369
#define GET_WORD_INDEX_12_21_OPT(n) ((((n)&MASK1_21_OPT)<<4) | ((n)&MASK2_12_21_OPT) | (((n)&MASK3_21_OPT)>>2) | (((n)&MASK4_21_OPT)>>6) | (((n)&MASK5_21_OPT)>>8))
 
370
#define GET_WORD_INDEX_11_21_OPT(n) ((((n)&MASK1_21_OPT)<<4) | (((n)&MASK2_11_21_OPT)>>2) | (((n)&MASK3_21_OPT)>>4) | (((n)&MASK4_21_OPT)>>8) | (((n)&MASK5_21_OPT)>>10))
 
371
#define MASK_EXTRA_21_OPT 0x000000ff
 
372
#define GET_EXTRA_CODE_21_OPT(s) ((((*(s+1))<<6) | ((*(s+3))<<4) | ((*(s+4))<<2) | (*(s+5))) & MASK_EXTRA_21_OPT)
 
373
#define GET_AMBIG_CONDITION_21_OPT(s) (((*(s+1))&NUC_MASK) | ((*(s+3))&NUC_MASK) | ((*(s+4))&NUC_MASK) | ((*(s+5))&NUC_MASK))
 
374
#define GET_EXTRA_CODE_PACKED_4_21_OPT(s) ((((*(s+1))&0x0f)<<2)|((*(s+1))&0xc0)|((*(s+2))>>6))
 
375
#define GET_EXTRA_CODE_PACKED_21_OPT(s,b,val,ecode) {GET_NEXT_PACKED_NUCL(s,b,ecode); GET_NEXT_PACKED_NUCL(s,b,val); GET_NEXT_PACKED_NUCL(s,b,val); PACK_EXTRA_CODE(ecode,val,MASK_EXTRA_21_OPT); GET_NEXT_PACKED_NUCL(s,b,val); PACK_EXTRA_CODE(ecode,val,MASK_EXTRA_21_OPT); GET_NEXT_PACKED_NUCL(s,b,val); PACK_EXTRA_CODE(ecode,val,MASK_EXTRA_21_OPT);}
 
376
 
 
377
 
 
378
/* CODING TEMPLATES */
 
379
 
282
380
/*    111,110,110,110,110,1 - 12 of 16 */ 
283
381
/*    110,110,110,110,110,1 - 11 of 16 */
284
 
/* 10,110,110,110,110,110,1 - 12 of 18 */
285
 
/* 10,110,110,010,110,110,1 - 11 of 18 */
286
 
#ifndef MASK1
287
382
#define MASK1    0x00000003
288
383
#define MASK2    0x000000f0
289
384
#define MASK3    0x00003c00
291
386
#define MASK5_12 0xffc00000 
292
387
#define MASK5_11 0x03c00000
293
388
#define MASK6    0xf0000000
 
389
/* 12 of 16 */
 
390
#define GET_WORD_INDEX_12_16(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4)>>6) | (((n)&MASK5_12)>>8))
 
391
/* 11 of 16 */
 
392
#define GET_WORD_INDEX_11_16(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4)>>6) | (((n)&MASK5_11)>>8) | (((n)&MASK6)>>10))
294
393
 
 
394
/* 10,110,110,110,110,110,1 - 12 of 18 */
 
395
/* 10,110,110,010,110,110,1 - 11 of 18 */
295
396
#define MASK1_18    0x0000000f
296
397
#define MASK2_18    0x000003c0
297
398
#define MASK3_11_18 0x00003000
300
401
#define MASK5_18    0x0f000000
301
402
#define MASK6_18    0xc0000000
302
403
 
303
 
/* 12 of 16 */
304
 
#define GET_WORD_INDEX_12_16(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4)>>6) | (((n)&MASK5_12)>>8))
305
 
/* 11 of 16 */
306
 
#define GET_WORD_INDEX_11_16(n) (((n)&MASK1) | (((n)&MASK2)>>2) | (((n)&MASK3)>>4) | (((n)&MASK4)>>6) | (((n)&MASK5_11)>>8) | (((n)&MASK6)>>10))
307
404
/* 12 of 18 */
308
 
#define GET_WORD_INDEX_12_18(n) ((((n)&MASK1_18)<<2) | ((n)&MASK2_18) | (((n)&MASK3_12_18)>>2) | (((n)&MASK4_18)>>4) | (((n)&MASK5_18)>>6) | (((n)&MASK6)>>8))
 
405
#define GET_WORD_INDEX_12_18(n) ((((n)&MASK1_18)<<2) | ((n)&MASK2_18) | (((n)&MASK3_12_18)>>2) | (((n)&MASK4_18)>>4) | (((n)&MASK5_18)>>6) | (((n)&MASK6_18)>>8))
309
406
/* 11 of 18 */
310
407
#define GET_WORD_INDEX_11_18(n) ((((n)&MASK1_18)<<2) | ((n)&MASK2_18) | (((n)&MASK3_11_18)>>2) | (((n)&MASK4_18)>>6) | (((n)&MASK5_18)>>8) | (((n)&MASK6_18)>>10))
311
 
#define GET_WORD_INDEX(n,b,c) (((~b&~c)&GET_WORD_INDEX_12_16(n)) | ((b&~c)&GET_WORD_INDEX_11_16(n)) | ((~b&c)&GET_WORD_INDEX_12_18(n)) | ((b&c)&GET_WORD_INDEX_11_18(n)))
312
 
#define MASK_EXTRA 0x00000003
313
 
#endif
314
 
 
315
 
#ifndef MASK_EXTRA
316
 
#define MASK_EXTRA 0
317
 
#endif
 
408
 
 
409
#define MASK_EXTRA_18 0x00000003
 
410
#define GET_EXTRA_CODE_18(s) ((*(s+2)) & MASK_EXTRA_18)
 
411
#define GET_EXTRA_CODE_PACKED_4_18(s) (((*(s+1))>>4) & MASK_EXTRA_18)
 
412
#define GET_EXTRA_CODE_PACKED_18(s,b,val,ecode) {GET_NEXT_PACKED_NUCL(s,b,val); GET_NEXT_PACKED_NUCL(s,b,ecode);}
 
413
#define GET_AMBIG_CONDITION_18(s) ((*(s+2))&NUC_MASK)
 
414
 
 
415
/* 10,010,110,110,110,010,110,1 - 12 of 21 */
 
416
/* 10,010,110,010,110,010,110,1 - 11 of 21 */
 
417
#define MASK1_21    0x00000003
 
418
#define MASK2_21    0x000003c0
 
419
#define MASK3_12_21 0x0000f000
 
420
#define MASK3_11_21 0x00003000
 
421
#define MASK4_21    0x003c0000
 
422
#define MASK5_21    0x03000000
 
423
#define MASK6_21    0xc0000000
 
424
#define GET_WORD_INDEX_12_21(n) ((((n)&MASK1_21)<<6) | (((n)&MASK2_21)<<2) | ((n)&MASK3_12_21) | (((n)&MASK4_21)>>2) | (((n)&MASK5_21)>>4) | (((n)&MASK6_21)>>8))
 
425
#define GET_WORD_INDEX_11_21(n) ((((n)&MASK1_21)<<6) | (((n)&MASK2_21)<<2) | ((n)&MASK3_11_21) | (((n)&MASK4_21)>>4) | (((n)&MASK5_21)>>6) | (((n)&MASK6_21)>>10))
 
426
#define MASK_EXTRA_21 0x0000003f
 
427
#define GET_EXTRA_CODE_21(s) ((((*(s+2))<<4) | ((*(s+3))<<2) | (*(s+5))) & MASK_EXTRA_21)
 
428
#define GET_AMBIG_CONDITION_21(s) (((*(s+2))&NUC_MASK) | ((*(s+3))&NUC_MASK) | ((*(s+5))&NUC_MASK))
 
429
#define GET_EXTRA_CODE_PACKED_4_21(s) (((*(s+1))&0x3c)|((*(s+2))>>6))
 
430
#define GET_EXTRA_CODE_PACKED_21(s,b,val,ecode) {GET_NEXT_PACKED_NUCL(s,b,val); GET_NEXT_PACKED_NUCL(s,b,ecode); GET_NEXT_PACKED_NUCL(s,b,val); PACK_EXTRA_CODE(ecode,val,MASK_EXTRA_21); GET_NEXT_PACKED_NUCL(s,b,val); GET_NEXT_PACKED_NUCL(s,b,val); PACK_EXTRA_CODE(ecode,val,MASK_EXTRA_21);}
318
431
 
319
432
/* Define LookupPosition (ie a hit_info) such that it can be loaded into a register */
320
433
 
343
456
   Int2 lpm;            /* Minimal length of perfect match */
344
457
   Int2 max_positions;  /* Maximal number of positions for one hash value */
345
458
   Int4Ptr hashtable;   /* Array of positions              */
 
459
   Int4Ptr hashtable2;  /* Array of positions for second template */
346
460
   Int4Ptr next_pos;    /* Extra positions stored here     */
 
461
   Int4Ptr next_pos2;   /* Extra positions for the second template */
347
462
   Uint4 mask; 
348
463
   Int4Ptr stack_index; /* Current number of elements in each stack */   
349
464
   Int4Ptr stack_size;  /* Available memory for each stack */
403
518
LookupTablePtr MegaBlastLookupTableDestruct PROTO((LookupTablePtr lookup));
404
519
 
405
520
BLAST_WordFinderPtr BLAST_WordFinderDestruct PROTO((BLAST_WordFinderPtr wfp));
 
521
 
406
522
BLAST_WordFinderPtr BLAST_WordFinderNew PROTO((Int2 alphabet_size, Int2 wordsize, Int2 compression_ratio, Boolean round_down));
407
523
 
408
 
 
 
524
BLAST_WordFinderPtr
 
525
MegaBlastWordFinderDeallocate PROTO((BLAST_WordFinderPtr wfp));
409
526
 
410
527
#ifdef __cplusplus
411
528
}