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_COMPACT_ALT_EM_H 18#define bts_COMPACT_ALT_EM_H 19 20/* ---- includes ----------------------------------------------------------- */ 21 22#include "b_TensorEm/CompactMat.h" 23 24/* ---- related objects --------------------------------------------------- */ 25 26/* ---- typedefs ----------------------------------------------------------- */ 27 28/* ---- constants ---------------------------------------------------------- */ 29 30/* data format version number */ 31#define bts_COMPACT_ALT_VERSION 100 32 33/* ---- object definition -------------------------------------------------- */ 34 35/** Compact Affine linear trasformation composed of compact matrix and 36 * translation vector (not compressed) 37 * 38 * Use this object for memory efficient storage of large matrices. 39 */ 40struct bts_CompactAlt 41{ 42 43 /* ---- private data --------------------------------------------------- */ 44 45 /* ---- public data ---------------------------------------------------- */ 46 47 /** compact matrix */ 48 struct bts_CompactMat matE; 49 50 /** translation vector (size = 0 when no translation) */ 51 struct bbs_Int16Arr vecE; 52 53 /** exponent of translation vector */ 54 int32 vecExpE; 55}; 56 57/* ---- associated objects ------------------------------------------------- */ 58 59/* ---- external functions ------------------------------------------------- */ 60 61/* ---- \ghd{ constructor/destructor } ------------------------------------- */ 62 63/** initializes object */ 64void bts_CompactAlt_init( struct bbs_Context* cpA, 65 struct bts_CompactAlt* ptrA ); 66 67/** destroys object */ 68void bts_CompactAlt_exit( struct bbs_Context* cpA, 69 struct bts_CompactAlt* ptrA ); 70 71/* ---- \ghd{ operators } -------------------------------------------------- */ 72 73/* copies alt */ 74void bts_CompactAlt_copy( struct bbs_Context* cpA, 75 struct bts_CompactAlt* ptrA, 76 const struct bts_CompactAlt* srcPtrA ); 77 78/* ---- \ghd{ query functions } -------------------------------------------- */ 79 80/* ---- \ghd{ modify functions } ------------------------------------------- */ 81 82/** allocates alt */ 83void bts_CompactAlt_create( struct bbs_Context* cpA, 84 struct bts_CompactAlt* ptrA, 85 uint32 widthA, 86 uint32 heightA, 87 uint32 bitsA, 88 uint32 maxRowSizeA, 89 struct bbs_MemSeg* mspA ); 90 91/* ---- \ghd{ memory I/O } ------------------------------------------------- */ 92 93/** size object needs when written to memory */ 94uint32 bts_CompactAlt_memSize( struct bbs_Context* cpA, 95 const struct bts_CompactAlt* ptrA ); 96 97/** writes object to memory; returns number of bytes written */ 98uint32 bts_CompactAlt_memWrite( struct bbs_Context* cpA, 99 const struct bts_CompactAlt* ptrA, 100 uint16* memPtrA ); 101 102/** reads object from memory; returns number of bytes read */ 103uint32 bts_CompactAlt_memRead( struct bbs_Context* cpA, 104 struct bts_CompactAlt* ptrA, 105 const uint16* memPtrA, 106 struct bbs_MemSeg* mspA ); 107 108/* ---- \ghd{ exec functions } --------------------------------------------- */ 109 110/** Maps vector inVec to outVec (overflow-safe) 111 * Memory areas of vectors may not overlap 112 * Function executes reasonably fast with maximum possible accuracy 113 * inExpA - input exponent 114 * outExpPtrA - exponent to output vector values 115 */ 116void bts_CompactAlt_map( struct bbs_Context* cpA, 117 const struct bts_CompactAlt* ptrA, 118 const int16* inVecA, 119 int16 inExpA, 120 int16* outVecA, 121 int16* outExpPtrA ); 122 123#endif /* bts_COMPACT_ALT_EM_H */ 124 125