Home | History | Annotate | Download | only in b_BitFeatureEm
      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 
     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 
     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 
     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 
     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 
    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 
    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 
    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 
    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 
    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 
    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 
    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 
    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 
    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