• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_TensorEm/Flt16Alt3D.h"
20 #include "b_BasicEm/Math.h"
21 #include "b_BasicEm/Memory.h"
22 #include "b_BasicEm/Functions.h"
23 
24 /* ------------------------------------------------------------------------- */
25 
26 /* ========================================================================= */
27 /*                                                                           */
28 /* ---- \ghd{ auxiliary functions } ---------------------------------------- */
29 /*                                                                           */
30 /* ========================================================================= */
31 
32 /* ------------------------------------------------------------------------- */
33 
34 /* ========================================================================= */
35 /*                                                                           */
36 /* ---- \ghd{ constructor / destructor } ----------------------------------- */
37 /*                                                                           */
38 /* ========================================================================= */
39 
40 /* ------------------------------------------------------------------------- */
41 
bts_Flt16Alt3D_init(struct bts_Flt16Alt3D * ptrA)42 void bts_Flt16Alt3D_init( struct bts_Flt16Alt3D* ptrA )
43 {
44 	bts_Flt16Mat3D_init( &ptrA->matE );
45 	bts_Flt16Vec3D_init( &ptrA->vecE );
46 }
47 
48 /* ------------------------------------------------------------------------- */
49 
bts_Flt16Alt3D_exit(struct bts_Flt16Alt3D * ptrA)50 void bts_Flt16Alt3D_exit( struct bts_Flt16Alt3D* ptrA )
51 {
52 	bts_Flt16Mat3D_exit( &ptrA->matE );
53 	bts_Flt16Vec3D_exit( &ptrA->vecE );
54 }
55 
56 /* ------------------------------------------------------------------------- */
57 
58 /* ========================================================================= */
59 /*                                                                           */
60 /* ---- \ghd{ operators } -------------------------------------------------- */
61 /*                                                                           */
62 /* ========================================================================= */
63 
64 /* ------------------------------------------------------------------------- */
65 
66 /* ========================================================================= */
67 /*                                                                           */
68 /* ---- \ghd{ query functions } -------------------------------------------- */
69 /*                                                                           */
70 /* ========================================================================= */
71 
72 /* ------------------------------------------------------------------------- */
73 
74 /* ========================================================================= */
75 /*                                                                           */
76 /* ---- \ghd{ modify functions } ------------------------------------------- */
77 /*                                                                           */
78 /* ========================================================================= */
79 
80 /* ------------------------------------------------------------------------- */
81 
82 /* ========================================================================= */
83 /*                                                                           */
84 /* ---- \ghd{ I/O } -------------------------------------------------------- */
85 /*                                                                           */
86 /* ========================================================================= */
87 
88 /* ------------------------------------------------------------------------- */
89 
bts_Flt16Alt3D_memSize(struct bbs_Context * cpA,const struct bts_Flt16Alt3D * ptrA)90 uint32 bts_Flt16Alt3D_memSize( struct bbs_Context* cpA,
91 							   const struct bts_Flt16Alt3D *ptrA )
92 {
93 	bbs_ERROR0( "unimplemented function" );
94 	return 0;
95 }
96 
97 /* ------------------------------------------------------------------------- */
98 
bts_Flt16Alt3D_memWrite(struct bbs_Context * cpA,const struct bts_Flt16Alt3D * ptrA,uint16 * memPtrA)99 uint32 bts_Flt16Alt3D_memWrite( struct bbs_Context* cpA,
100 							    const struct bts_Flt16Alt3D* ptrA,
101 								uint16* memPtrA )
102 {
103 	bbs_ERROR0( "unimplemented function" );
104 	return 0;
105 }
106 
107 /* ------------------------------------------------------------------------- */
108 
bts_Flt16Alt3D_memRead(struct bbs_Context * cpA,struct bts_Flt16Alt3D * ptrA,const uint16 * memPtrA)109 uint32 bts_Flt16Alt3D_memRead( struct bbs_Context* cpA,
110 							   struct bts_Flt16Alt3D* ptrA,
111 							   const uint16* memPtrA )
112 {
113 	if( bbs_Context_error( cpA ) ) return 0;
114 	bbs_ERROR0( "unimplemented function" );
115 	return 0;
116 }
117 
118 /* ------------------------------------------------------------------------- */
119 
120 /* ========================================================================= */
121 /*                                                                           */
122 /* ---- \ghd{ exec functions } --------------------------------------------- */
123 /*                                                                           */
124 /* ========================================================================= */
125 
126 /* ------------------------------------------------------------------------- */
127 
bts_Flt16Alt3D_createIdentity()128 struct bts_Flt16Alt3D bts_Flt16Alt3D_createIdentity()
129 {
130 	struct bts_Flt16Alt3D altL = { { 1, 0, 0,
131 									 0, 1, 0,
132 									 0, 0, 1, 0 }, { 0, 0, 0, 0 } };
133 	return altL;
134 }
135 
136 /* ------------------------------------------------------------------------- */
137 
bts_Flt16Alt3D_createScale(int32 scaleA,int32 scaleBbpA,const struct bts_Flt16Vec3D * centerPtrA)138 struct bts_Flt16Alt3D bts_Flt16Alt3D_createScale( int32 scaleA,
139 												  int32 scaleBbpA,
140 												  const struct bts_Flt16Vec3D* centerPtrA )
141 {
142 	struct bts_Flt16Alt3D altL;
143 	altL.matE = bts_Flt16Mat3D_createScale( scaleA, scaleBbpA );
144 	altL.vecE = bts_Flt16Vec3D_sub( *centerPtrA, bts_Flt16Mat3D_mapFlt( &altL.matE, centerPtrA ) );
145 	return altL;
146 }
147 
148 /* ------------------------------------------------------------------------- */
149 
bts_Flt16Alt3D_createLinear(const struct bts_Flt16Mat3D * matPtrA,const struct bts_Flt16Vec3D * centerPtrA)150 struct bts_Flt16Alt3D bts_Flt16Alt3D_createLinear( const struct bts_Flt16Mat3D* matPtrA,
151 												   const struct bts_Flt16Vec3D* centerPtrA )
152 {
153 	struct bts_Flt16Alt3D altL;
154 	altL.matE = *matPtrA;
155 	altL.vecE = bts_Flt16Vec3D_sub( *centerPtrA, bts_Flt16Mat3D_mapFlt( &altL.matE, centerPtrA ) );
156 	return altL;
157 }
158 
159 /* ------------------------------------------------------------------------- */
160 
bts_Flt16Alt3D_create16(int16 xxA,int16 xyA,int16 xzA,int16 yxA,int16 yyA,int16 yzA,int16 zxA,int16 zyA,int16 zzA,int16 matBbpA,int16 xA,int16 yA,int16 zA,int16 vecBbpA)161 struct bts_Flt16Alt3D bts_Flt16Alt3D_create16( int16 xxA, int16 xyA, int16 xzA,
162 											   int16 yxA, int16 yyA, int16 yzA,
163 											   int16 zxA, int16 zyA, int16 zzA,
164 											   int16 matBbpA,
165 											   int16 xA, int16 yA, int16 zA,
166 											   int16 vecBbpA )
167 {
168 	struct bts_Flt16Alt3D altL;
169 	altL.matE = bts_Flt16Mat3D_create16( xxA, xyA, xzA,
170 										 yxA, yyA, yzA,
171 										 zxA, zyA, zzA,
172 										 matBbpA );
173 
174 	altL.vecE = bts_Flt16Vec3D_create16( xA, yA, zA, vecBbpA );
175 	return altL;
176 }
177 
178 /* ------------------------------------------------------------------------- */
179 
bts_Flt16Alt3D_create32(int32 xxA,int32 xyA,int32 xzA,int32 yxA,int32 yyA,int32 yzA,int32 zxA,int32 zyA,int32 zzA,int16 matBbpA,int32 xA,int32 yA,int32 zA,int16 vecBbpA)180 struct bts_Flt16Alt3D bts_Flt16Alt3D_create32( int32 xxA, int32 xyA, int32 xzA,
181 											   int32 yxA, int32 yyA, int32 yzA,
182 											   int32 zxA, int32 zyA, int32 zzA,
183 											   int16 matBbpA,
184 											   int32 xA, int32 yA, int32 zA,
185 											   int16 vecBbpA )
186 {
187 	struct bts_Flt16Alt3D altL;
188 	altL.matE = bts_Flt16Mat3D_create32( xxA, xyA, xzA,
189 										 yxA, yyA, yzA,
190 										 zxA, zyA, zzA,
191 										 matBbpA );
192 
193 	altL.vecE = bts_Flt16Vec3D_create32( xA, yA, zA, vecBbpA );
194 	return altL;
195 }
196 
197 /* ------------------------------------------------------------------------- */
198 
bts_Flt16Alt3D_mapFlt(const struct bts_Flt16Alt3D * altPtrA,const struct bts_Flt16Vec3D * vecPtrA)199 struct bts_Flt16Vec3D bts_Flt16Alt3D_mapFlt( const struct bts_Flt16Alt3D* altPtrA,
200 								             const struct bts_Flt16Vec3D* vecPtrA )
201 {
202 	struct bts_Flt16Vec3D vecL = bts_Flt16Mat3D_mapFlt( &altPtrA->matE, vecPtrA );
203 	int32 shiftL = altPtrA->vecE.bbpE - vecL.bbpE;
204 	if( shiftL > 0 )
205 	{
206 		int32 sh1L = shiftL - 1;
207 		vecL.xE += ( ( altPtrA->vecE.xE >> sh1L ) + 1 ) >> 1;
208 		vecL.yE += ( ( altPtrA->vecE.yE >> sh1L ) + 1 ) >> 1;
209 		vecL.zE += ( ( altPtrA->vecE.zE >> sh1L ) + 1 ) >> 1;
210 	}
211 	else
212 	{
213 		vecL.xE += altPtrA->vecE.xE << -shiftL;
214 		vecL.yE += altPtrA->vecE.yE << -shiftL;
215 		vecL.zE += altPtrA->vecE.zE << -shiftL;
216 	}
217 	return vecL;
218 }
219 
220 /* ------------------------------------------------------------------------- */
221 
bts_Flt16Alt3D_mul(const struct bts_Flt16Alt3D * alt1PtrA,const struct bts_Flt16Alt3D * alt2PtrA)222 struct bts_Flt16Alt3D bts_Flt16Alt3D_mul( const struct bts_Flt16Alt3D* alt1PtrA,
223 								          const struct bts_Flt16Alt3D* alt2PtrA )
224 {
225 	struct bts_Flt16Alt3D altL;
226 	altL.vecE = bts_Flt16Alt3D_mapFlt( alt1PtrA, &alt2PtrA->vecE );
227 	altL.matE = bts_Flt16Mat3D_mul( &alt1PtrA->matE, &alt2PtrA->matE );
228 	return altL;
229 }
230 
231 /* ------------------------------------------------------------------------- */
232 
233 /** multiplies matrix with matA; returns pointer to resulting matrix */
bts_Flt16Alt3D_mulTo(struct bts_Flt16Alt3D * alt1PtrA,const struct bts_Flt16Alt3D * alt2PtrA)234 struct bts_Flt16Alt3D* bts_Flt16Alt3D_mulTo( struct bts_Flt16Alt3D* alt1PtrA,
235 				                             const struct bts_Flt16Alt3D* alt2PtrA )
236 {
237 	*alt1PtrA = bts_Flt16Alt3D_mul( alt1PtrA, alt2PtrA );
238 	return alt1PtrA;
239 }
240 
241 /* ------------------------------------------------------------------------- */
242 
243 /* ========================================================================= */
244 
245