1 /* @include ajrange ***********************************************************
2 **
3 ** AJAX range functions
4 **
5 ** @author Copyright (C) 1999 Alan Bleasby
6 ** @version $Revision: 1.24 $
7 ** @modified Aug 21 ajb First version
8 ** @modified 7 Sept 1999 GWW - String range edit functions added
9 ** @modified 5 Nov 1999 GWW - store text after pairs of numbers
10 ** @modified $Date: 2011/10/18 14:23:40 $ by $Author: rice $
11 ** @@
12 **
13 ** This library is free software; you can redistribute it and/or
14 ** modify it under the terms of the GNU Lesser General Public
15 ** License as published by the Free Software Foundation; either
16 ** version 2.1 of the License, or (at your option) any later version.
17 **
18 ** This library is distributed in the hope that it will be useful,
19 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 ** Lesser General Public License for more details.
22 **
23 ** You should have received a copy of the GNU Lesser General Public
24 ** License along with this library; if not, write to the Free Software
25 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26 ** MA  02110-1301,  USA.
27 **
28 ******************************************************************************/
29 
30 #ifndef AJRANGE_H
31 #define AJRANGE_H
32 
33 /* ========================================================================= */
34 /* ============================= include files ============================= */
35 /* ========================================================================= */
36 
37 #include "ajdefine.h"
38 #include "ajseqdata.h"
39 #include "ajlist.h"
40 #include "ajtranslate.h"
41 
42 AJ_BEGIN_DECLS
43 
44 
45 
46 
47 /* ========================================================================= */
48 /* =============================== constants =============================== */
49 /* ========================================================================= */
50 
51 
52 
53 
54 /* ========================================================================= */
55 /* ============================== public data ============================== */
56 /* ========================================================================= */
57 
58 
59 
60 
61 /* @data AjPRange *************************************************************
62 **
63 ** Data structure for AJAX sequence range specifications
64 **
65 ** @alias AjORange
66 ** @alias AjSRange
67 **
68 ** @attr start [ajuint*] From positions
69 ** @attr end [ajuint*] End positions
70 ** @attr text [AjPStr*] Associated text for each range
71 ** @attr n [ajuint] Number of ranges
72 ** @attr Padding [char[4]] Padding to alignment boundary
73 ** @@
74 ******************************************************************************/
75 
76 typedef struct AjSRange
77 {
78     ajuint *start;
79     ajuint *end;
80     AjPStr *text;
81     ajuint n;
82     char Padding[4];
83 } AjORange;
84 
85 #define AjPRange AjORange*
86 
87 
88 
89 
90 /* ========================================================================= */
91 /* =========================== public functions ============================ */
92 /* ========================================================================= */
93 
94 
95 
96 
97 /*
98 ** Prototype definitions
99 */
100 
101 AjBool    ajRangeSetOffset(AjPRange thys, ajuint begin);
102 AjBool    ajRangeElementSet(AjPRange thys, ajuint element,
103                             ajuint start, ajuint end);
104 AjBool    ajRangeIsWhole(const AjPRange thys, const AjPSeq s);
105 void      ajRangeDel(AjPRange *thys);
106 AjPRange  ajRangeNewI(ajuint n);
107 AjPRange  ajRangeNewFilename(const AjPStr name);
108 AjPRange  ajRangeNewFilenameLimits(const AjPStr name,
109                                    ajuint imin, ajuint imax,
110                                    ajuint minsize, ajuint size);
111 AjPRange  ajRangeNewRange(const AjPRange src);
112 AjPRange  ajRangeNewString(const AjPStr s);
113 AjPRange  ajRangeNewStringLimits(const AjPStr str, ajuint imin, ajuint imax,
114                                  ajuint minsize, ajuint size);
115 ajuint    ajRangeGetSize(const AjPRange thys);
116 AjBool    ajRangeIsOrdered(const AjPRange thys);
117 ajuint    ajRangeCountOverlaps(const AjPRange thys, ajuint pos, ajuint length);
118 ajuint    ajRangeElementTypeOverlap(const AjPRange thys, ajuint element,
119                                     ajuint pos, ajuint length);
120 AjBool    ajRangeSeqExtract(const AjPRange thys, AjPSeq seq);
121 AjPSeq    ajRangeSeqExtractPep(const AjPRange thys, AjPSeq seq,
122                                const AjPTrn trntable, ajint frame);
123 AjBool    ajRangeSeqExtractList(const AjPRange thys,
124                                 const AjPSeq seq, AjPList outliststr);
125 AjBool    ajRangeSeqMask(const AjPRange thys,
126                          const AjPStr maskchar, AjPSeq seq);
127 AjBool    ajRangeSeqStuff(const AjPRange thys, AjPSeq seq);
128 AjBool    ajRangeSeqStuffPep(const AjPRange thys, AjPSeq seq,
129                              ajint frame);
130 AjBool    ajRangeSeqToLower(const AjPRange thys, AjPSeq seq);
131 AjBool    ajRangeStrExtract(const AjPRange thys,
132                             const AjPStr instr, AjPStr *outstr);
133 AjBool    ajRangeStrExtractList(const AjPRange thys,
134                                 const AjPStr instr, AjPList outliststr);
135 AjBool    ajRangeStrMask(const AjPRange thys,
136                          const AjPStr maskchar, AjPStr *str);
137 AjBool    ajRangeStrStuff(const AjPRange thys,
138                           const AjPStr instr, AjPStr *outstr);
139 AjBool    ajRangeStrToLower(const AjPRange thys, AjPStr *str);
140 AjBool    ajRangeElementGetText(const AjPRange thys, ajuint element,
141                                 AjPStr * text);
142 AjBool    ajRangeElementGetValues(const AjPRange thys, ajuint element,
143                                   ajuint *start, ajuint *end);
144 
145 /*
146 ** End of prototype definitions
147 */
148 
149 
150 
151 
152 #ifdef AJ_COMPILE_DEPRECATED_BOOK
153 #endif /* AJ_COMPILE_DEPRECATED_BOOK */
154 
155 #ifdef AJ_COMPILE_DEPRECATED
156 
157 __deprecated AjPRange  ajRangeCopy(const AjPRange src);
158 __deprecated AjPRange  ajRangeGet(const AjPStr s);
159 __deprecated AjPRange  ajRangeGetLimits(const AjPStr str,
160                                         ajuint imin, ajuint imax,
161                                         ajuint minsize, ajuint size);
162 __deprecated AjPRange  ajRangeFile(const AjPStr name);
163 __deprecated AjPRange  ajRangeFileLimits(const AjPStr name,
164                                          ajuint imin, ajuint imax,
165                                          ajuint minsize, ajuint size);
166 __deprecated ajuint    ajRangeNumber(const AjPRange thys);
167 __deprecated AjBool    ajRangeValues(const AjPRange thys, ajuint element,
168                                      ajuint *start, ajuint *end);
169 __deprecated AjBool    ajRangeBegin(AjPRange thys, ajuint begin);
170 __deprecated AjBool    ajRangeChange(AjPRange thys, ajuint element,
171                                      ajuint start, ajuint end);
172 __deprecated AjBool    ajRangeText(const AjPRange thys, ajuint element,
173                                    AjPStr * text);
174 __deprecated ajuint    ajRangeOverlaps(const AjPRange thys,
175                                        ajuint pos, ajuint length);
176 __deprecated ajuint    ajRangeOverlapSingle(ajuint start, ajuint end,
177                                             ajuint pos, ajuint length);
178 __deprecated AjBool    ajRangeOrdered(const AjPRange thys);
179 __deprecated AjBool    ajRangeDefault(const AjPRange thys, const AjPSeq s);
180 
181 #endif /* AJ_COMPILE_DEPRECATED */
182 
183 
184 
185 
186 AJ_END_DECLS
187 
188 #endif /* !AJRANGE_H */
189