blob: 43ae987cc299db9409188ebf36a6fc526da4c11a [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#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
32struct 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 */
44struct 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 */
75void bts_Cluster2D_init( struct bbs_Context* cpA,
76 struct bts_Cluster2D* ptrA );
77
78/** destroys cluster */
79void bts_Cluster2D_exit( struct bbs_Context* cpA,
80 struct bts_Cluster2D* ptrA );
81
82/* ---- \ghd{ operators } -------------------------------------------------- */
83
84/** copies cluster */
85void bts_Cluster2D_copy( struct bbs_Context* cpA,
86 struct bts_Cluster2D* ptrA,
87 const struct bts_Cluster2D* srcPtrA );
88
89/** compares cluster */
90flag 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 */
97struct bts_Flt16Vec2D bts_Cluster2D_center( struct bbs_Context* cpA,
98 const struct bts_Cluster2D* ptrA );
99
100/** returns check sum (for debugging purpose) */
101uint32 bts_Cluster2D_checkSum( struct bbs_Context* cpA,
102 const struct bts_Cluster2D* ptrA );
103
104/** returns bounding box */
105struct 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 */
109int32 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 */
114int32 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 */
122void 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)*/
128void 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) */
133void 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 */
138void 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) */
144void 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 */
149void 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 */
158uint32 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 */
162uint32 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 */
167uint32 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 */
177struct 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