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 #ifndef bbf_FEATURE_EM_H
18 #define bbf_FEATURE_EM_H
19 
20 /* ---- includes ----------------------------------------------------------- */
21 
22 #include "b_BasicEm/Context.h"
23 #include "b_BasicEm/Basic.h"
24 #include "b_BasicEm/MemTbl.h"
25 #include "b_BitFeatureEm/Functions.h"
26 
27 /* ---- related objects  --------------------------------------------------- */
28 
29 /* ---- typedefs ----------------------------------------------------------- */
30 
31 enum bbf_FeatureType
32 {
33 	bbf_FT_UNDEFINED = 0,
34 	bbf_FT_SEQUENCE,
35 	bbf_FT_I04_DNS_2X2_FTR,
36 	bbf_FT_I04_TLD_2X4_FTR,
37 	bbf_FT_I04_DNS_2X4_FTR,
38 	bbf_FT_L01_TLD_2X4_FTR,
39 	bbf_FT_L01_DNS_2X4_FTR,
40 	bbf_FT_L04_DNS_2X4_FTR,
41 	bbf_FT_L04_DNS_3X3_FTR,
42 	bbf_FT_L06_DNS_3X3_FTR,
43 	bbf_FT_L06_DNS_4X4_FTR,
44 	bbf_FT_L06_DNS_NX4X4_FTR,
45 
46 	bbf_FT_L01_TLD_1X1_FTR,
47 	bbf_FT_L04_TLD_2X4_FTR,
48 	bbf_FT_L04_DNS_2X2_FTR
49 };
50 
51 /* ---- constants ---------------------------------------------------------- */
52 
53 /* ---- object definition -------------------------------------------------- */
54 
55 /** base object for features (occurs as first element in all feature objects) */
56 struct bbf_Feature
57 {
58 	/* ---- private data --------------------------------------------------- */
59 
60 	/* ---- public data ---------------------------------------------------- */
61 
62 	/** feature type */
63 	uint32 typeE;
64 
65 	/** width of patch */
66 	uint32 patchWidthE;
67 
68 	/** height of patch */
69 	uint32 patchHeightE;
70 
71 	/* ---- virtual functions ---------------------------------------------- */
72 
73 	/** computes feature's activity (4.28) on the given patch */
74 	int32 ( *vpActivityE )( const struct bbf_Feature* ptrA, const uint32* patchA );
75 };
76 
77 /* ---- associated objects ------------------------------------------------- */
78 
79 /* ---- external functions ------------------------------------------------- */
80 
81 /* ---- \ghd{ constructor/destructor } ------------------------------------- */
82 
83 /** initializes bbf_Feature  */
84 void bbf_Feature_init( struct bbs_Context* cpA,
85 					   struct bbf_Feature* ptrA );
86 
87 /** resets bbf_Feature  */
88 void bbf_Feature_exit( struct bbs_Context* cpA,
89 					   struct bbf_Feature* ptrA );
90 
91 /* ---- \ghd{ operators } -------------------------------------------------- */
92 
93 /** copy operator */
94 void bbf_Feature_copy( struct bbs_Context* cpA,
95 					   struct bbf_Feature* ptrA,
96 					   const struct bbf_Feature* srcPtrA );
97 
98 /** equal operator */
99 flag bbf_Feature_equal( struct bbs_Context* cpA,
100 						const struct bbf_Feature* ptrA,
101 						const struct bbf_Feature* srcPtrA );
102 
103 /* ---- \ghd{ query functions } -------------------------------------------- */
104 
105 /* ---- \ghd{ modify functions } ------------------------------------------- */
106 
107 /* ---- \ghd{ memory I/O } ------------------------------------------------- */
108 
109 /** word size (16-bit) object needs when written to memory */
110 uint32 bbf_Feature_memSize( struct bbs_Context* cpA,
111 						    const struct bbf_Feature* ptrA );
112 
113 /** writes object to memory; returns number of words (16-bit) written */
114 uint32 bbf_Feature_memWrite( struct bbs_Context* cpA,
115 							 const struct bbf_Feature* ptrA, uint16* memPtrA );
116 
117 /** reads object from memory; returns number of words (16-bit) read */
118 uint32 bbf_Feature_memRead( struct bbs_Context* cpA,
119 							struct bbf_Feature* ptrA, const uint16* memPtrA );
120 
121 /* ---- \ghd{ exec functions } --------------------------------------------- */
122 
123 /** virtual init function  */
124 void bbf_featureInit( struct bbs_Context* cpA,
125 					  struct bbf_Feature* ptrA,
126 					  enum bbf_FeatureType typeA );
127 
128 /** virtual exit function */
129 void bbf_featureExit( struct bbs_Context* cpA,
130 					  struct bbf_Feature* ptrA );
131 
132 /** virtual mem size function */
133 uint32 bbf_featureMemSize( struct bbs_Context* cpA,
134 						   const struct bbf_Feature* ptrA );
135 
136 /** virtual mem write function */
137 uint32 bbf_featureMemWrite( struct bbs_Context* cpA,
138 						    const struct bbf_Feature* ptrA, uint16* memPtrA );
139 
140 /** virtual mem read function */
141 uint32 bbf_featureMemRead( struct bbs_Context* cpA,
142 						   struct bbf_Feature* ptrA,
143 						   const uint16* memPtrA,
144 						   struct bbs_MemTbl* mtpA );
145 
146 /** virtual sizeof operator for 16bit units */
147 uint32 bbf_featureSizeOf16( struct bbs_Context* cpA, enum bbf_FeatureType typeA );
148 
149 #endif /* bbf_FEATURE_EM_H */
150 
151