17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License.
67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at
77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and
147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License.
157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifndef bts_COMPACT_ALT_EM_H
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bts_COMPACT_ALT_EM_H
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/CompactMat.h"
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- related objects  --------------------------------------------------- */
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- typedefs ----------------------------------------------------------- */
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- constants ---------------------------------------------------------- */
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* data format version number */
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bts_COMPACT_ALT_VERSION 100
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- object definition -------------------------------------------------- */
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** Compact Affine linear trasformation composed of compact matrix and
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  translation vector (not compressed)
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  Use this object for memory efficient storage of large matrices.
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_CompactAlt
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* ---- private data --------------------------------------------------- */
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* ---- public data ---------------------------------------------------- */
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** compact matrix */
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bts_CompactMat matE;
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** translation vector (size = 0 when no translation) */
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_Int16Arr vecE;
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** exponent of translation vector */
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 vecExpE;
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project};
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- associated objects ------------------------------------------------- */
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- external functions ------------------------------------------------- */
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor/destructor } ------------------------------------- */
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** initializes object */
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_CompactAlt_init( struct bbs_Context* cpA,
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					      struct bts_CompactAlt* ptrA );
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** destroys object */
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_CompactAlt_exit( struct bbs_Context* cpA,
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					      struct bts_CompactAlt* ptrA );
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* copies alt */
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_CompactAlt_copy( struct bbs_Context* cpA,
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					      struct bts_CompactAlt* ptrA,
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  const struct bts_CompactAlt* srcPtrA );
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** allocates alt */
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_CompactAlt_create( struct bbs_Context* cpA,
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    struct bts_CompactAlt* ptrA,
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    uint32 widthA,
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    uint32 heightA,
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    uint32 bitsA,
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							uint32 maxRowSizeA,
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				            struct bbs_MemSeg* mspA );
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ memory I/O } ------------------------------------------------- */
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** size object needs when written to memory */
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_CompactAlt_memSize( struct bbs_Context* cpA,
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   const struct bts_CompactAlt* ptrA );
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** writes object to memory; returns number of bytes written */
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_CompactAlt_memWrite( struct bbs_Context* cpA,
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    const struct bts_CompactAlt* ptrA,
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    uint16* memPtrA );
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** reads object from memory; returns number of bytes read */
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_CompactAlt_memRead( struct bbs_Context* cpA,
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   struct bts_CompactAlt* ptrA,
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   const uint16* memPtrA,
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				               struct bbs_MemSeg* mspA );
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** Maps vector inVec to outVec (overflow-safe)
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  Memory areas of vectors may not overlap
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  Function executes reasonably fast with maximum possible accuracy
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  inExpA - input exponent
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  outExpPtrA - exponent to output vector values
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_CompactAlt_map( struct bbs_Context* cpA,
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 const struct bts_CompactAlt* ptrA,
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 const int16* inVecA,
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 int16  inExpA,
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 int16* outVecA,
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 int16* outExpPtrA );
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif /* bts_COMPACT_ALT_EM_H */
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
125