annotate clustalomega/clustal-omega-1.0.2/src/squid/gsi.h @ 1:bc707542e5de

Uploaded
author clustalomega
date Thu, 21 Jul 2011 13:35:08 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
1 /*****************************************************************
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
2 * SQUID - a library of functions for biological sequence analysis
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
3 * Copyright (C) 1992-2002 Washington University School of Medicine
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
4 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
5 * This source code is freely distributed under the terms of the
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
6 * GNU General Public License. See the files COPYRIGHT and LICENSE
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
7 * for details.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
8 *****************************************************************/
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
9
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
10 #ifndef GSIH_INCLUDED
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
11 #define GSIH_INCLUDED
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
12
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
13 /* gsi.h
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
14 * Database indexing (GSI format support)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
15 * RCS $Id: gsi.h 217 2011-03-19 10:27:10Z andreas $ (Original squid RCS Id: gsi.h,v 1.3 2001/08/04 20:15:42 eddy Exp)
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
16 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
17 * A GSI (generic sequence index) file is composed of
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
18 * recnum + nfiles + 1 records. Each record contains
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
19 * three fields; key, file number, and disk offset.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
20 * Record 0 contains:
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
21 * [ "GSI" ] [ nfiles ] [ recnum ]
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
22 * Records 1..nfiles map file names to file numbers, and contain:
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
23 * [ filename ] [ file number, 1..nfiles ] [ 0 (unused) ]
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
24 * Records nfiles+1 to recnum+nfiles+1 provide disk offset
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
25 * and file number indices for every key:
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
26 * [ key ] [ file number ] [ offset]
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
27 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
28 * Because the file is binary, we take some (but not
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
29 * complete) care to improve portability amongst platforms.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
30 * This means using network order integers (see ntohl())
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
31 * and defining types for 16 and 32 bit integers.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
32 *
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
33 * Because we use 32-bit offsets, ftell(), and fseek(),
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
34 * there is an implicit 2 Gb file size maximum.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
35 * AFAIK neither ANSI C nor POSIX provide a portable solution
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
36 * to this problem. fsetpos(), fgetpos() use an
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
37 * opaque fpos_t datatype that we can't write portably
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
38 * to a disk file. Suggestions welcomed.
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
39 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
40 #define GSI_KEYSIZE 32 /* keys are 32 bytes long */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
41 #define GSI_RECSIZE 38 /* 32 + 2 + 4 bytes */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
42 #define SQD_UINT16_MAX 65535 /* 2^16-1 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
43 #define SQD_UINT32_MAX 4294967295U/* 2^32-1 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
44
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
45 struct gsi_s {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
46 FILE *gsifp; /* open GSI index file */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
47 sqd_uint16 nfiles; /* number of files = 16 bit int */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
48 sqd_uint32 recnum; /* number of records = 32 bit int */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
49 };
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
50 typedef struct gsi_s GSIFILE;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
51
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
52 struct gsikey_s {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
53 char key[GSI_KEYSIZE];
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
54 sqd_uint16 filenum;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
55 sqd_uint32 offset;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
56 };
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
57 struct gsiindex_s {
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
58 char **filenames;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
59 int *fmt;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
60 sqd_uint16 nfiles;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
61
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
62 struct gsikey_s *elems;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
63 int nkeys;
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
64 };
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
65
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
66
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
67 /* from gsi.c
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
68 */
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
69 extern GSIFILE *GSIOpen(char *gsifile);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
70 extern int GSIGetRecord(GSIFILE *gsi, char *f1, sqd_uint16 *f2, sqd_uint32 *f3);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
71 extern int GSIGetOffset(GSIFILE *gsi, char *key, char *sqfile,
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
72 int *fmt, long *ret_offset);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
73 extern void GSIClose(GSIFILE *gsi);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
74 extern struct gsiindex_s *GSIAllocIndex(void);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
75 extern void GSIFreeIndex(struct gsiindex_s *g);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
76 extern void GSIAddFileToIndex(struct gsiindex_s *g, char *filename, int fmt);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
77 extern void GSIAddKeyToIndex(struct gsiindex_s *g, char *key, int filenum, long offset);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
78 extern void GSISortIndex(struct gsiindex_s *g);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
79 extern void GSIWriteIndex(FILE *fp, struct gsiindex_s *g);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
80 extern void GSIWriteHeader(FILE *fp, int nfiles, long nkeys);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
81 extern int GSIWriteFileRecord(FILE *fp, char *fname, int idx, int fmt);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
82 extern int GSIWriteKeyRecord(FILE *fp, char *key, int fileidx, long offset);
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
83
bc707542e5de Uploaded
clustalomega
parents:
diff changeset
84 #endif /*GSIH_INCLUDED*/