blob: 2185e9036431856de0b16f90e8132a6d75d5b588 [file] [log] [blame]
The Android Open Source Project7f81d9b2009-03-03 19:30:08 -08001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/* ---- includes ----------------------------------------------------------- */
18
19#include "b_BasicEm/Functions.h"
20#include "b_BitFeatureEm/Feature.h"
21
22#include "b_BitFeatureEm/Sequence.h"
23#include "b_BitFeatureEm/I04Dns2x2Ftr.h"
24#include "b_BitFeatureEm/I04Tld2x4Ftr.h"
25#include "b_BitFeatureEm/I04Dns2x4Ftr.h"
26#include "b_BitFeatureEm/L01Tld2x4Ftr.h"
27#include "b_BitFeatureEm/L01Dns2x4Ftr.h"
28#include "b_BitFeatureEm/L04Dns2x4Ftr.h"
29#include "b_BitFeatureEm/L04Dns3x3Ftr.h"
30#include "b_BitFeatureEm/L06Dns3x3Ftr.h"
31#include "b_BitFeatureEm/L06Dns4x4Ftr.h"
32#include "b_BitFeatureEm/L06DnsNx4x4Ftr.h"
33#include "b_BitFeatureEm/L01Tld1x1Ftr.h"
34#include "b_BitFeatureEm/L04Tld2x4Ftr.h"
35#include "b_BitFeatureEm/L04Dns2x2Ftr.h"
36
37/* ------------------------------------------------------------------------- */
38
39/* ========================================================================= */
40/* */
41/* ---- \ghd{ auxiliary functions } ---------------------------------------- */
42/* */
43/* ========================================================================= */
44
45/* ------------------------------------------------------------------------- */
46
47/* ========================================================================= */
48/* */
49/* ---- \ghd{ constructor / destructor } ----------------------------------- */
50/* */
51/* ========================================================================= */
52
53/* ------------------------------------------------------------------------- */
54
55void bbf_Feature_init( struct bbs_Context* cpA,
56 struct bbf_Feature* ptrA )
57{
58 ptrA->typeE = 0;
59 ptrA->patchWidthE = 0;
60 ptrA->patchHeightE = 0;
61 ptrA->vpActivityE = NULL;
62}
63
64/* ------------------------------------------------------------------------- */
65
66void bbf_Feature_exit( struct bbs_Context* cpA,
67 struct bbf_Feature* ptrA )
68{
69 ptrA->typeE = 0;
70 ptrA->patchWidthE = 0;
71 ptrA->patchHeightE = 0;
72 ptrA->vpActivityE = NULL;
73}
74
75/* ------------------------------------------------------------------------- */
76
77/* ========================================================================= */
78/* */
79/* ---- \ghd{ operators } -------------------------------------------------- */
80/* */
81/* ========================================================================= */
82
83/* ------------------------------------------------------------------------- */
84
85void bbf_Feature_copy( struct bbs_Context* cpA,
86 struct bbf_Feature* ptrA,
87 const struct bbf_Feature* srcPtrA )
88{
89 ptrA->typeE = srcPtrA->typeE;
90 ptrA->patchWidthE = srcPtrA->patchWidthE;
91 ptrA->patchHeightE = srcPtrA->patchHeightE;
92 ptrA->vpActivityE = srcPtrA->vpActivityE;
93}
94
95/* ------------------------------------------------------------------------- */
96
97flag bbf_Feature_equal( struct bbs_Context* cpA,
98 const struct bbf_Feature* ptrA,
99 const struct bbf_Feature* srcPtrA )
100{
101
102 if( ptrA->typeE != srcPtrA->typeE ) return FALSE;
103 if( ptrA->patchWidthE != srcPtrA->patchWidthE ) return FALSE;
104 if( ptrA->patchHeightE != srcPtrA->patchHeightE ) return FALSE;
105 if( ptrA->vpActivityE != srcPtrA->vpActivityE ) return FALSE;
106 return TRUE;
107}
108
109/* ------------------------------------------------------------------------- */
110
111/* ========================================================================= */
112/* */
113/* ---- \ghd{ query functions } -------------------------------------------- */
114/* */
115/* ========================================================================= */
116
117/* ------------------------------------------------------------------------- */
118
119/* ========================================================================= */
120/* */
121/* ---- \ghd{ modify functions } ------------------------------------------- */
122/* */
123/* ========================================================================= */
124
125/* ------------------------------------------------------------------------- */
126
127/* ========================================================================= */
128/* */
129/* ---- \ghd{ I/O } -------------------------------------------------------- */
130/* */
131/* ========================================================================= */
132
133/* ------------------------------------------------------------------------- */
134
135uint32 bbf_Feature_memSize( struct bbs_Context* cpA,
136 const struct bbf_Feature* ptrA )
137{
138 uint32 memSizeL = 0;
139 memSizeL += bbs_SIZEOF16( ptrA->typeE );
140 memSizeL += bbs_SIZEOF16( ptrA->patchWidthE );
141 memSizeL += bbs_SIZEOF16( ptrA->patchHeightE );
142 return memSizeL;
143}
144
145/* ------------------------------------------------------------------------- */
146
147uint32 bbf_Feature_memWrite( struct bbs_Context* cpA,
148 const struct bbf_Feature* ptrA,
149 uint16* memPtrA )
150{
151 uint32 memSizeL = bbf_Feature_memSize( cpA, ptrA );
152 memPtrA += bbs_memWrite32( &ptrA->typeE, memPtrA );
153 memPtrA += bbs_memWrite32( &ptrA->patchWidthE, memPtrA );
154 memPtrA += bbs_memWrite32( &ptrA->patchHeightE, memPtrA );
155 return memSizeL;
156}
157
158/* ------------------------------------------------------------------------- */
159
160uint32 bbf_Feature_memRead( struct bbs_Context* cpA,
161 struct bbf_Feature* ptrA,
162 const uint16* memPtrA )
163{
164 if( bbs_Context_error( cpA ) ) return 0;
165 memPtrA += bbs_memRead32( &ptrA->typeE, memPtrA );
166 memPtrA += bbs_memRead32( &ptrA->patchWidthE, memPtrA );
167 memPtrA += bbs_memRead32( &ptrA->patchHeightE, memPtrA );
168 return bbf_Feature_memSize( cpA, ptrA );
169}
170
171/* ------------------------------------------------------------------------- */
172
173/* ========================================================================= */
174/* */
175/* ---- \ghd{ exec functions } --------------------------------------------- */
176/* */
177/* ========================================================================= */
178
179/* ------------------------------------------------------------------------- */
180
181void bbf_featureInit( struct bbs_Context* cpA,
182 struct bbf_Feature* ptrA,
183 enum bbf_FeatureType typeA )
184{
185 switch( typeA )
186 {
187 case bbf_FT_SEQUENCE: bbf_Sequence_init( cpA, ( struct bbf_Sequence* )ptrA ); return;
188 case bbf_FT_I04_DNS_2X2_FTR: bbf_I04Dns2x2Ftr_init( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); return;
189 case bbf_FT_I04_TLD_2X4_FTR: bbf_I04Tld2x4Ftr_init( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); return;
190 case bbf_FT_I04_DNS_2X4_FTR: bbf_I04Dns2x4Ftr_init( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); return;
191 case bbf_FT_L01_TLD_2X4_FTR: bbf_L01Tld2x4Ftr_init( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); return;
192 case bbf_FT_L01_DNS_2X4_FTR: bbf_L01Dns2x4Ftr_init( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); return;
193 case bbf_FT_L04_DNS_2X4_FTR: bbf_L04Dns2x4Ftr_init( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); return;
194 case bbf_FT_L04_DNS_3X3_FTR: bbf_L04Dns3x3Ftr_init( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); return;
195 case bbf_FT_L06_DNS_3X3_FTR: bbf_L06Dns3x3Ftr_init( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); return;
196 case bbf_FT_L06_DNS_4X4_FTR: bbf_L06Dns4x4Ftr_init( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); return;
197 case bbf_FT_L06_DNS_NX4X4_FTR: bbf_L06DnsNx4x4Ftr_init( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); return;
198 case bbf_FT_L01_TLD_1X1_FTR: bbf_L01Tld1x1Ftr_init( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); return;
199 case bbf_FT_L04_TLD_2X4_FTR: bbf_L04Tld2x4Ftr_init( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); return;
200 case bbf_FT_L04_DNS_2X2_FTR: bbf_L04Dns2x2Ftr_init( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); return;
201
202 default: bbs_ERROR0( "bbf_featureInit: invalid type" );
203 }
204}
205
206/* ------------------------------------------------------------------------- */
207
208void bbf_featureExit( struct bbs_Context* cpA,
209 struct bbf_Feature* ptrA )
210{
211 switch( ptrA->typeE )
212 {
213 case bbf_FT_SEQUENCE: bbf_Sequence_exit( cpA, ( struct bbf_Sequence* )ptrA ); return;
214 case bbf_FT_I04_DNS_2X2_FTR: bbf_I04Dns2x2Ftr_exit( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA ); return;
215 case bbf_FT_I04_TLD_2X4_FTR: bbf_I04Tld2x4Ftr_exit( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA ); return;
216 case bbf_FT_I04_DNS_2X4_FTR: bbf_I04Dns2x4Ftr_exit( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA ); return;
217 case bbf_FT_L01_TLD_2X4_FTR: bbf_L01Tld2x4Ftr_exit( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA ); return;
218 case bbf_FT_L01_DNS_2X4_FTR: bbf_L01Dns2x4Ftr_exit( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA ); return;
219 case bbf_FT_L04_DNS_2X4_FTR: bbf_L04Dns2x4Ftr_exit( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA ); return;
220 case bbf_FT_L04_DNS_3X3_FTR: bbf_L04Dns3x3Ftr_exit( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA ); return;
221 case bbf_FT_L06_DNS_3X3_FTR: bbf_L06Dns3x3Ftr_exit( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA ); return;
222 case bbf_FT_L06_DNS_4X4_FTR: bbf_L06Dns4x4Ftr_exit( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA ); return;
223 case bbf_FT_L06_DNS_NX4X4_FTR: bbf_L06DnsNx4x4Ftr_exit( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA ); return;
224 case bbf_FT_L01_TLD_1X1_FTR: bbf_L01Tld1x1Ftr_exit( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA ); return;
225 case bbf_FT_L04_TLD_2X4_FTR: bbf_L04Tld2x4Ftr_exit( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA ); return;
226 case bbf_FT_L04_DNS_2X2_FTR: bbf_L04Dns2x2Ftr_exit( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA ); return;
227 default: bbs_ERROR0( "bbf_featureExit: invalid type" );
228 }
229}
230
231/* ------------------------------------------------------------------------- */
232
233uint32 bbf_featureMemSize( struct bbs_Context* cpA,
234 const struct bbf_Feature* ptrA )
235{
236 switch( ptrA->typeE )
237 {
238 case bbf_FT_SEQUENCE: return bbf_Sequence_memSize( cpA, ( struct bbf_Sequence* )ptrA );
239 case bbf_FT_I04_DNS_2X2_FTR: return bbf_I04Dns2x2Ftr_memSize( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA );
240 case bbf_FT_I04_TLD_2X4_FTR: return bbf_I04Tld2x4Ftr_memSize( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA );
241 case bbf_FT_I04_DNS_2X4_FTR: return bbf_I04Dns2x4Ftr_memSize( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA );
242 case bbf_FT_L01_TLD_2X4_FTR: return bbf_L01Tld2x4Ftr_memSize( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA );
243 case bbf_FT_L01_DNS_2X4_FTR: return bbf_L01Dns2x4Ftr_memSize( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA );
244 case bbf_FT_L04_DNS_2X4_FTR: return bbf_L04Dns2x4Ftr_memSize( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA );
245 case bbf_FT_L04_DNS_3X3_FTR: return bbf_L04Dns3x3Ftr_memSize( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA );
246 case bbf_FT_L06_DNS_3X3_FTR: return bbf_L06Dns3x3Ftr_memSize( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA );
247 case bbf_FT_L06_DNS_4X4_FTR: return bbf_L06Dns4x4Ftr_memSize( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA );
248 case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memSize( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA );
249 case bbf_FT_L01_TLD_1X1_FTR: return bbf_L01Tld1x1Ftr_memSize( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA );
250 case bbf_FT_L04_TLD_2X4_FTR: return bbf_L04Tld2x4Ftr_memSize( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA );
251 case bbf_FT_L04_DNS_2X2_FTR: return bbf_L04Dns2x2Ftr_memSize( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA );
252 default: bbs_ERROR0( "bbf_featureExit: invalid type" );
253 }
254 return 0;
255}
256
257/* ------------------------------------------------------------------------- */
258
259uint32 bbf_featureMemWrite( struct bbs_Context* cpA,
260 const struct bbf_Feature* ptrA, uint16* memPtrA )
261{
262 switch( ptrA->typeE )
263 {
264 case bbf_FT_SEQUENCE: return bbf_Sequence_memWrite( cpA, ( struct bbf_Sequence* )ptrA, memPtrA );
265 case bbf_FT_I04_DNS_2X2_FTR: return bbf_I04Dns2x2Ftr_memWrite( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA, memPtrA );
266 case bbf_FT_I04_TLD_2X4_FTR: return bbf_I04Tld2x4Ftr_memWrite( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA, memPtrA );
267 case bbf_FT_I04_DNS_2X4_FTR: return bbf_I04Dns2x4Ftr_memWrite( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA, memPtrA );
268 case bbf_FT_L01_TLD_2X4_FTR: return bbf_L01Tld2x4Ftr_memWrite( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA, memPtrA );
269 case bbf_FT_L01_DNS_2X4_FTR: return bbf_L01Dns2x4Ftr_memWrite( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA, memPtrA );
270 case bbf_FT_L04_DNS_2X4_FTR: return bbf_L04Dns2x4Ftr_memWrite( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA, memPtrA );
271 case bbf_FT_L04_DNS_3X3_FTR: return bbf_L04Dns3x3Ftr_memWrite( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA, memPtrA );
272 case bbf_FT_L06_DNS_3X3_FTR: return bbf_L06Dns3x3Ftr_memWrite( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA, memPtrA );
273 case bbf_FT_L06_DNS_4X4_FTR: return bbf_L06Dns4x4Ftr_memWrite( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA, memPtrA );
274 case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memWrite( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA, memPtrA );
275 case bbf_FT_L01_TLD_1X1_FTR: return bbf_L01Tld1x1Ftr_memWrite( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA, memPtrA );
276 case bbf_FT_L04_TLD_2X4_FTR: return bbf_L04Tld2x4Ftr_memWrite( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA, memPtrA );
277 case bbf_FT_L04_DNS_2X2_FTR: return bbf_L04Dns2x2Ftr_memWrite( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA, memPtrA );
278 default: bbs_ERROR0( "bbf_featureMemWrite: invalid type" );
279 }
280 return 0;
281}
282
283/* ------------------------------------------------------------------------- */
284
285uint32 bbf_featureMemRead( struct bbs_Context* cpA,
286 struct bbf_Feature* ptrA,
287 const uint16* memPtrA,
288 struct bbs_MemTbl* mtpA )
289{
290 switch( ptrA->typeE )
291 {
292 case bbf_FT_SEQUENCE: return bbf_Sequence_memRead( cpA, ( struct bbf_Sequence* )ptrA, memPtrA, mtpA );
293 case bbf_FT_I04_DNS_2X2_FTR: return bbf_I04Dns2x2Ftr_memRead( cpA, ( struct bbf_I04Dns2x2Ftr* )ptrA, memPtrA, mtpA );
294 case bbf_FT_I04_TLD_2X4_FTR: return bbf_I04Tld2x4Ftr_memRead( cpA, ( struct bbf_I04Tld2x4Ftr* )ptrA, memPtrA, mtpA );
295 case bbf_FT_I04_DNS_2X4_FTR: return bbf_I04Dns2x4Ftr_memRead( cpA, ( struct bbf_I04Dns2x4Ftr* )ptrA, memPtrA, mtpA );
296 case bbf_FT_L01_TLD_2X4_FTR: return bbf_L01Tld2x4Ftr_memRead( cpA, ( struct bbf_L01Tld2x4Ftr* )ptrA, memPtrA, mtpA );
297 case bbf_FT_L01_DNS_2X4_FTR: return bbf_L01Dns2x4Ftr_memRead( cpA, ( struct bbf_L01Dns2x4Ftr* )ptrA, memPtrA, mtpA );
298 case bbf_FT_L04_DNS_2X4_FTR: return bbf_L04Dns2x4Ftr_memRead( cpA, ( struct bbf_L04Dns2x4Ftr* )ptrA, memPtrA, mtpA );
299 case bbf_FT_L04_DNS_3X3_FTR: return bbf_L04Dns3x3Ftr_memRead( cpA, ( struct bbf_L04Dns3x3Ftr* )ptrA, memPtrA, mtpA );
300 case bbf_FT_L06_DNS_3X3_FTR: return bbf_L06Dns3x3Ftr_memRead( cpA, ( struct bbf_L06Dns3x3Ftr* )ptrA, memPtrA, mtpA );
301 case bbf_FT_L06_DNS_4X4_FTR: return bbf_L06Dns4x4Ftr_memRead( cpA, ( struct bbf_L06Dns4x4Ftr* )ptrA, memPtrA, mtpA );
302 case bbf_FT_L06_DNS_NX4X4_FTR: return bbf_L06DnsNx4x4Ftr_memRead( cpA, ( struct bbf_L06DnsNx4x4Ftr* )ptrA, memPtrA, mtpA );
303 case bbf_FT_L01_TLD_1X1_FTR: return bbf_L01Tld1x1Ftr_memRead( cpA, ( struct bbf_L01Tld1x1Ftr* )ptrA, memPtrA, mtpA );
304 case bbf_FT_L04_TLD_2X4_FTR: return bbf_L04Tld2x4Ftr_memRead( cpA, ( struct bbf_L04Tld2x4Ftr* )ptrA, memPtrA, mtpA );
305 case bbf_FT_L04_DNS_2X2_FTR: return bbf_L04Dns2x2Ftr_memRead( cpA, ( struct bbf_L04Dns2x2Ftr* )ptrA, memPtrA, mtpA );
306 default: bbs_ERROR0( "bbf_featureMemRead: invalid type" );
307 }
308 return 0;
309}
310
311/* ------------------------------------------------------------------------- */
312
313uint32 bbf_featureSizeOf16( struct bbs_Context* cpA, enum bbf_FeatureType typeA )
314{
315 switch( typeA )
316 {
317 case bbf_FT_SEQUENCE: return bbs_SIZEOF16( struct bbf_Sequence );
318 case bbf_FT_I04_DNS_2X2_FTR: return bbs_SIZEOF16( struct bbf_I04Dns2x2Ftr );
319 case bbf_FT_I04_TLD_2X4_FTR: return bbs_SIZEOF16( struct bbf_I04Tld2x4Ftr );
320 case bbf_FT_I04_DNS_2X4_FTR: return bbs_SIZEOF16( struct bbf_I04Dns2x4Ftr );
321 case bbf_FT_L01_TLD_2X4_FTR: return bbs_SIZEOF16( struct bbf_L01Tld2x4Ftr );
322 case bbf_FT_L01_DNS_2X4_FTR: return bbs_SIZEOF16( struct bbf_L01Dns2x4Ftr );
323 case bbf_FT_L04_DNS_2X4_FTR: return bbs_SIZEOF16( struct bbf_L04Dns2x4Ftr );
324 case bbf_FT_L04_DNS_3X3_FTR: return bbs_SIZEOF16( struct bbf_L04Dns3x3Ftr );
325 case bbf_FT_L06_DNS_3X3_FTR: return bbs_SIZEOF16( struct bbf_L06Dns3x3Ftr );
326 case bbf_FT_L06_DNS_4X4_FTR: return bbs_SIZEOF16( struct bbf_L06Dns4x4Ftr );
327 case bbf_FT_L06_DNS_NX4X4_FTR: return bbs_SIZEOF16( struct bbf_L06DnsNx4x4Ftr );
328 case bbf_FT_L01_TLD_1X1_FTR: return bbs_SIZEOF16( struct bbf_L01Tld1x1Ftr );
329 case bbf_FT_L04_TLD_2X4_FTR: return bbs_SIZEOF16( struct bbf_L04Tld2x4Ftr );
330 case bbf_FT_L04_DNS_2X2_FTR: return bbs_SIZEOF16( struct bbf_L04Dns2x2Ftr );
331 default: bbs_ERROR0( "bbf_featureSizeOf16: invalid type" );
332 }
333 return 0;
334}
335
336/* ------------------------------------------------------------------------- */
337
338/* ========================================================================= */
339