blob: 7dbec9e84d666d8353f897cf58a750d8590c2704 [file] [log] [blame]
The Android Open Source Project30957f52008-10-21 07:00:00 -07001/*
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_VECTOR_MAP_EM_H
18#define bts_VECTOR_MAP_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_TensorEm/Flt16Vec.h"
26
27/* ---- related objects --------------------------------------------------- */
28
29/* ---- typedefs ----------------------------------------------------------- */
30
31/** Object Type */
32enum bts_VectorMapType
33{
34 bts_VM_UNDEFINED = 0,
35 bts_VM_MAP_SEQUENCE, /* sequence of vector maps */
36 bts_VM_NORMALIZER, /* normalizes a vector using euclidean norm */
37 bts_VM_MAT, /* linear transformation (matrix) */
38 bts_VM_ALT, /* affine linear transformation */
39 bts_VM_SUB_VEC_MAP /* sub vector extraction */
40};
41
42/* ---- constants ---------------------------------------------------------- */
43
44/* ---- object definition -------------------------------------------------- */
45
46/** base object for vector maps (occurs as first element in all vector map objects) */
47struct bts_VectorMap
48{
49 /* ---- private data --------------------------------------------------- */
50
51 /* ---- public data ---------------------------------------------------- */
52
53 /** vector map type */
54 uint32 typeE;
55
56 /* ---- virtual functions ---------------------------------------------- */
57
58 /** vector map operation.
59 * Maps vector inVec to outVec (overflow-safe)
60 * Memory areas of vectors may not overlap
61 */
62 void ( *vpMapE )( struct bbs_Context* cpA,
63 const struct bts_VectorMap* ptrA,
64 const struct bts_Flt16Vec* inVecPtrA,
65 struct bts_Flt16Vec* outVecPtrA );
66
67};
68
69/* ---- associated objects ------------------------------------------------- */
70
71/* ---- external functions ------------------------------------------------- */
72
73/* ---- \ghd{ constructor/destructor } ------------------------------------- */
74
75/** initializes bts_VectorMap */
76void bts_VectorMap_init( struct bbs_Context* cpA,
77 struct bts_VectorMap* ptrA );
78
79/** resets bts_VectorMap */
80void bts_VectorMap_exit( struct bbs_Context* cpA,
81 struct bts_VectorMap* ptrA );
82
83/* ---- \ghd{ operators } -------------------------------------------------- */
84
85/** copy operator */
86void bts_VectorMap_copy( struct bbs_Context* cpA,
87 struct bts_VectorMap* ptrA,
88 const struct bts_VectorMap* srcPtrA );
89
90/** equal operator */
91flag bts_VectorMap_equal( struct bbs_Context* cpA,
92 const struct bts_VectorMap* ptrA,
93 const struct bts_VectorMap* srcPtrA );
94
95/* ---- \ghd{ query functions } -------------------------------------------- */
96
97/* ---- \ghd{ modify functions } ------------------------------------------- */
98
99/* ---- \ghd{ memory I/O } ------------------------------------------------- */
100
101/** word size (16-bit) object needs when written to memory */
102uint32 bts_VectorMap_memSize( struct bbs_Context* cpA,
103 const struct bts_VectorMap* ptrA );
104
105/** writes object to memory; returns number of words (16-bit) written */
106uint32 bts_VectorMap_memWrite( struct bbs_Context* cpA,
107 const struct bts_VectorMap* ptrA, uint16* memPtrA );
108
109/** reads object from memory; returns number of words (16-bit) read */
110uint32 bts_VectorMap_memRead( struct bbs_Context* cpA,
111 struct bts_VectorMap* ptrA, const uint16* memPtrA );
112
113/* ---- \ghd{ exec functions } --------------------------------------------- */
114
115/** virtual init function */
116void bts_vectorMapInit( struct bbs_Context* cpA,
117 struct bts_VectorMap* ptrA,
118 enum bts_VectorMapType typeA );
119
120/** virtual exit function */
121void bts_vectorMapExit( struct bbs_Context* cpA,
122 struct bts_VectorMap* ptrA );
123
124/** virtual mem size function */
125uint32 bts_vectorMapMemSize( struct bbs_Context* cpA,
126 const struct bts_VectorMap* ptrA );
127
128/** virtual mem write function */
129uint32 bts_vectorMapMemWrite( struct bbs_Context* cpA,
130 const struct bts_VectorMap* ptrA, uint16* memPtrA );
131
132/** virtual mem read function */
133uint32 bts_vectorMapMemRead( struct bbs_Context* cpA,
134 struct bts_VectorMap* ptrA,
135 const uint16* memPtrA,
136 struct bbs_MemTbl* mtpA );
137
138/** virtual sizeof operator for 16bit units */
139uint32 bts_vectorMapSizeOf16( struct bbs_Context* cpA, enum bts_VectorMapType typeA );
140
141#endif /* bts_VECTOR_MAP_EM_H */
142