1 /*
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 
bbf_Feature_init(struct bbs_Context * cpA,struct bbf_Feature * ptrA)55 void 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 
bbf_Feature_exit(struct bbs_Context * cpA,struct bbf_Feature * ptrA)66 void 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 
bbf_Feature_copy(struct bbs_Context * cpA,struct bbf_Feature * ptrA,const struct bbf_Feature * srcPtrA)85 void 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 
bbf_Feature_equal(struct bbs_Context * cpA,const struct bbf_Feature * ptrA,const struct bbf_Feature * srcPtrA)97 flag 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 
bbf_Feature_memSize(struct bbs_Context * cpA,const struct bbf_Feature * ptrA)135 uint32 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 
bbf_Feature_memWrite(struct bbs_Context * cpA,const struct bbf_Feature * ptrA,uint16 * memPtrA)147 uint32 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 
bbf_Feature_memRead(struct bbs_Context * cpA,struct bbf_Feature * ptrA,const uint16 * memPtrA)160 uint32 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 
bbf_featureInit(struct bbs_Context * cpA,struct bbf_Feature * ptrA,enum bbf_FeatureType typeA)181 void 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 
bbf_featureExit(struct bbs_Context * cpA,struct bbf_Feature * ptrA)208 void 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 
bbf_featureMemSize(struct bbs_Context * cpA,const struct bbf_Feature * ptrA)233 uint32 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 
bbf_featureMemWrite(struct bbs_Context * cpA,const struct bbf_Feature * ptrA,uint16 * memPtrA)259 uint32 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 
bbf_featureMemRead(struct bbs_Context * cpA,struct bbf_Feature * ptrA,const uint16 * memPtrA,struct bbs_MemTbl * mtpA)285 uint32 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 
bbf_featureSizeOf16(struct bbs_Context * cpA,enum bbf_FeatureType typeA)313 uint32 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 
340