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_FLT16ALT3D_EM_H
18 #define bts_FLT16ALT3D_EM_H
19 
20 /* ---- includes ----------------------------------------------------------- */
21 
22 #include "b_BasicEm/Context.h"
23 #include "b_BasicEm/Basic.h"
24 #include "b_TensorEm/Flt16Mat3D.h"
25 #include "b_TensorEm/Flt16Vec3D.h"
26 
27 /* ---- related objects  --------------------------------------------------- */
28 
29 /* ---- typedefs ----------------------------------------------------------- */
30 
31 /* ---- constants ---------------------------------------------------------- */
32 
33 /* ---- object definition -------------------------------------------------- */
34 
35 /** 3d affine linear trafo */
36 struct bts_Flt16Alt3D
37 {
38 
39 	/* ---- private data --------------------------------------------------- */
40 
41 	/* ---- public data ---------------------------------------------------- */
42 
43 	/** matrix */
44 	struct bts_Flt16Mat3D matE;
45 
46 	/** vector */
47 	struct bts_Flt16Vec3D vecE;
48 };
49 
50 /* ---- associated objects ------------------------------------------------- */
51 
52 /* ---- external functions ------------------------------------------------- */
53 
54 /* ---- \ghd{ constructor/destructor } ------------------------------------- */
55 
56 /** initializes alt */
57 void bts_Flt16Alt3D_init( struct bts_Flt16Alt3D* ptrA );
58 
59 /** destroys alt */
60 void bts_Flt16Alt3D_exit( struct bts_Flt16Alt3D* ptrA );
61 
62 /* ---- \ghd{ operators } -------------------------------------------------- */
63 
64 /* ---- \ghd{ query functions } -------------------------------------------- */
65 
66 /* ---- \ghd{ modify functions } ------------------------------------------- */
67 
68 /* ---- \ghd{ memory I/O } ------------------------------------------------- */
69 
70 /** size object needs when written to memory */
71 uint32 bts_Flt16Alt3D_memSize( struct bbs_Context* cpA,
72 							   const struct bts_Flt16Alt3D* ptrA );
73 
74 /** writes object to memory; returns number of bytes written */
75 uint32 bts_Flt16Alt3D_memWrite( struct bbs_Context* cpA,
76 							    const struct bts_Flt16Alt3D* ptrA,
77 								uint16* memPtrA );
78 
79 /** reads object from memory; returns number of bytes read */
80 uint32 bts_Flt16Alt3D_memRead( struct bbs_Context* cpA,
81 							   struct bts_Flt16Alt3D* ptrA,
82 							   const uint16* memPtrA );
83 
84 /* ---- \ghd{ exec functions } --------------------------------------------- */
85 
86 /** creates identity alt */
87 struct bts_Flt16Alt3D bts_Flt16Alt3D_createIdentity( void );
88 
89 /** creates scale alt */
90 struct bts_Flt16Alt3D bts_Flt16Alt3D_createScale( int32 scaleA,
91 												  int32 scaleBbpA,
92 												  const struct bts_Flt16Vec3D* centerPtrA );
93 
94 /** creates linear alt from matrix and center */
95 struct bts_Flt16Alt3D bts_Flt16Alt3D_createLinear( const struct bts_Flt16Mat3D* matPtrA,
96 												   const struct bts_Flt16Vec3D* centerPtrA );
97 
98 /** creates alt from 16 bit values */
99 struct bts_Flt16Alt3D bts_Flt16Alt3D_create16( int16 xxA, int16 xyA, int16 xzA,
100 											   int16 yxA, int16 yyA, int16 yzA,
101 											   int16 zxA, int16 zyA, int16 zzA,
102 											   int16 matBbpA,
103 											   int16 xA, int16 yA, int16 zA,
104 											   int16 vecBbpA );
105 
106 /** creates alt from 32 bit values (automatic adjustment of bbp value) */
107 struct bts_Flt16Alt3D bts_Flt16Alt3D_create32( int32 xxA, int32 xyA, int32 xzA,
108 											   int32 yxA, int32 yyA, int32 yzA,
109 											   int32 zxA, int32 zyA, int32 zzA,
110 											   int16 matBbpA,
111 											   int32 xA, int32 yA, int32 zA,
112 											   int16 vecBbpA );
113 
114 /** Multiplies matrix with float vecA; returns resulting vector */
115 struct bts_Flt16Vec3D bts_Flt16Alt3D_mapFlt( const struct bts_Flt16Alt3D* matPtrA,
116 								             const struct bts_Flt16Vec3D* vecPtrA );
117 
118 /** multiplies alt with altA returns resulting alt */
119 struct bts_Flt16Alt3D bts_Flt16Alt3D_mul( const struct bts_Flt16Alt3D* mat1PtrA,
120 								          const struct bts_Flt16Alt3D* mat2PtrA );
121 
122 /** multiplies alt with matA; returns pointer to resulting alt */
123 struct bts_Flt16Alt3D* bts_Flt16Alt3D_mulTo( struct bts_Flt16Alt3D* mat1PtrA,
124 				                             const struct bts_Flt16Alt3D* mat2PtrA );
125 
126 #endif /* bts_FLT16ALT3D_EM_H */
127 
128