auto import from //depot/cupcake/@135843
[android/platform/external/neven.git] / Embedded / common / src / b_TensorEm / Cluster2D.h
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 bts_CLUSTER2D_EM_H
18 #define bts_CLUSTER2D_EM_H
19
20 /* ---- includes ----------------------------------------------------------- */
21
22 #include "b_BasicEm/Context.h"
23 #include "b_BasicEm/MemSeg.h"
24 #include "b_TensorEm/Int16Vec2D.h"
25 #include "b_TensorEm/Flt16Vec2D.h"
26 #include "b_TensorEm/Int16Rect.h"
27 #include "b_TensorEm/Flt16Alt2D.h"
28 #include "b_TensorEm/Functions.h"
29
30 /* ---- related objects  --------------------------------------------------- */
31
32 struct bts_RBFMap2D;
33
34 /* ---- typedefs ----------------------------------------------------------- */
35
36 /* data format version number */
37 #define bts_CLUSTER2D_VERSION 100
38
39 /* ---- constants ---------------------------------------------------------- */
40
41 /* ---- object definition -------------------------------------------------- */
42
43 /** 2d vector array */
44 struct bts_Cluster2D 
45 {
46
47         /* ---- private data --------------------------------------------------- */
48
49         /* ---- public data ---------------------------------------------------- */
50
51         /** pointer to exclusive memory segment used for allocation */
52         struct bbs_MemSeg* mspE;
53
54         /** number of allocated vectors */
55         uint32 allocatedSizeE;
56
57         /** number of vectors */
58         uint32 sizeE;
59
60         /** format of vectors (bbpE always > 0) */
61         int32 bbpE;
62
63         /** array of int16 vectors */
64         struct bts_Int16Vec2D* vecArrE;
65
66 };
67
68 /* ---- associated objects ------------------------------------------------- */
69
70 /* ---- external functions ------------------------------------------------- */
71
72 /* ---- \ghd{ constructor/destructor } ------------------------------------- */
73
74 /** initializes cluster */
75 void bts_Cluster2D_init( struct bbs_Context* cpA,
76                                                  struct bts_Cluster2D* ptrA );
77
78 /** destroys cluster */
79 void bts_Cluster2D_exit( struct bbs_Context* cpA,
80                                                  struct bts_Cluster2D* ptrA );
81
82 /* ---- \ghd{ operators } -------------------------------------------------- */
83
84 /** copies cluster */
85 void bts_Cluster2D_copy( struct bbs_Context* cpA,
86                                                  struct bts_Cluster2D* ptrA, 
87                                                  const struct bts_Cluster2D* srcPtrA );
88
89 /** compares cluster */
90 flag bts_Cluster2D_equal( struct bbs_Context* cpA,
91                                                   const struct bts_Cluster2D* ptrA, 
92                                                   const struct bts_Cluster2D* srcPtrA );
93
94 /* ---- \ghd{ query functions } -------------------------------------------- */
95
96 /** returns center of gravity */
97 struct bts_Flt16Vec2D bts_Cluster2D_center( struct bbs_Context* cpA,
98                                                                                     const struct bts_Cluster2D* ptrA );
99
100 /** returns check sum (for debugging purpose) */
101 uint32 bts_Cluster2D_checkSum( struct bbs_Context* cpA,
102                                                            const struct bts_Cluster2D* ptrA );
103
104 /** returns bounding box */
105 struct bts_Int16Rect bts_Cluster2D_boundingBox( struct bbs_Context* cpA,
106                                                                                             const struct bts_Cluster2D* ptrA );
107
108 /** returns int32 x-coordinate with given bbp at indexed position */
109 int32 bts_Cluster2D_int32X( struct bbs_Context* cpA,
110                                                     const struct bts_Cluster2D* ptrA, 
111                                                         uint32 indexA, int32 bbpA );
112
113 /** returns int32 y-coordinate with given bbp at indexed position */
114 int32 bts_Cluster2D_int32Y( struct bbs_Context* cpA,
115                                                     const struct bts_Cluster2D* ptrA, 
116                                                         uint32 indexA, 
117                                                         int32 bbpA );
118
119 /* ---- \ghd{ modify functions } ------------------------------------------- */
120
121 /** allocates cluster */
122 void bts_Cluster2D_create( struct bbs_Context* cpA,
123                                                    struct bts_Cluster2D* ptrA, 
124                                                    uint32 sizeA,
125                                                    struct bbs_MemSeg* mspA );
126
127 /** resize cluster (sizeA must be smaller or equal to allocated size)*/
128 void bts_Cluster2D_size( struct bbs_Context* cpA,
129                                                  struct bts_Cluster2D* ptrA, 
130                                                  uint32 sizeA );
131
132 /** transforms cluster according to alt (function does not change bbp of cluster) */
133 void bts_Cluster2D_transform( struct bbs_Context* cpA,
134                                                           struct bts_Cluster2D* ptrA, 
135                                                           struct bts_Flt16Alt2D altA );
136
137 /** transforms cluster according to alt and set bbp of output cluster */
138 void bts_Cluster2D_transformBbp( struct bbs_Context* cpA,
139                                                              struct bts_Cluster2D* ptrA, 
140                                                              struct bts_Flt16Alt2D altA,
141                                                                  uint32 dstBbpA );
142
143 /** transforms cluster with rbf map (function does not change bbp of cluster) */
144 void bts_Cluster2D_rbfTransform( struct bbs_Context* cpA,
145                                                                  struct bts_Cluster2D* ptrA, 
146                                                                  const struct bts_RBFMap2D* rbfMapPtrA );
147
148 /** copies src cluster and simultaneously transforms vectors according to alt using dstBbpA as resulting cluster format */
149 void bts_Cluster2D_copyTransform( struct bbs_Context* cpA,
150                                                                   struct bts_Cluster2D* ptrA, 
151                                                                   const struct bts_Cluster2D* srcPtrA, 
152                                                                   struct bts_Flt16Alt2D altA, 
153                                                                   uint32 dstBbpA );
154
155 /* ---- \ghd{ memory I/O } ------------------------------------------------- */
156
157 /** size in words (16-bit) object needs when written to memory */
158 uint32 bts_Cluster2D_memSize( struct bbs_Context* cpA,
159                                                           const struct bts_Cluster2D* ptrA );
160
161 /** writes object to memory; returns number of words (16-bit) written */
162 uint32 bts_Cluster2D_memWrite( struct bbs_Context* cpA,
163                                                            const struct bts_Cluster2D* ptrA, 
164                                                            uint16* memPtrA );
165
166 /** reads object from memory; returns number of words (16-bit) read */
167 uint32 bts_Cluster2D_memRead( struct bbs_Context* cpA,
168                                                           struct bts_Cluster2D* ptrA, 
169                                                           const uint16* memPtrA,
170                                                       struct bbs_MemSeg* mspA );
171
172 /* ---- \ghd{ exec functions } --------------------------------------------- */
173
174 /** Computes the best affine linear transformation from *srcPtrA to *dstPtrA.
175  *  Constrains of trafo are given by altTypeA
176  */
177 struct bts_Flt16Alt2D bts_Cluster2D_alt( struct bbs_Context* cpA,
178                                                                                  const struct bts_Cluster2D* srcPtrA,
179                                                                                  const struct bts_Cluster2D* dstPtrA,
180                                                                                  enum bts_AltType altTypeA );
181
182 #endif /* bts_CLUSTER2D_EM_H */
183