| /* | 
 |  * Copyright (C) 2008 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #ifndef bts_INT32MAT_EM_H | 
 | #define bts_INT32MAT_EM_H | 
 |  | 
 | /* ---- includes ----------------------------------------------------------- */ | 
 |  | 
 | #include "b_BasicEm/Int32Arr.h" | 
 |  | 
 | /* ---- related objects  --------------------------------------------------- */ | 
 |  | 
 | /* ---- typedefs ----------------------------------------------------------- */ | 
 |  | 
 | /* ---- constants ---------------------------------------------------------- */ | 
 |  | 
 | /* data format version number */ | 
 | #define bts_INT32MAT_VERSION 100 | 
 |  | 
 | /* ---- object definition -------------------------------------------------- */ | 
 |  | 
 | /** square matrix */ | 
 | struct bts_Int32Mat  | 
 | { | 
 |  | 
 | 	/* ---- private data --------------------------------------------------- */ | 
 |  | 
 | 	/* ---- public data ---------------------------------------------------- */ | 
 |  | 
 | 	/* width = height of square matrix */ | 
 | 	uint32 widthE; | 
 |  | 
 | 	/* array of matrix elements (data is arranged by rows) */ | 
 | 	struct bbs_Int32Arr arrE; | 
 |  | 
 | }; | 
 |  | 
 | /* ---- associated objects ------------------------------------------------- */ | 
 |  | 
 | /* ---- external functions ------------------------------------------------- */ | 
 |  | 
 | /* ---- \ghd{ constructor/destructor } ------------------------------------- */ | 
 |  | 
 | /** initializes matrix */ | 
 | void bts_Int32Mat_init( struct bbs_Context* cpA, | 
 | 					    struct bts_Int32Mat* ptrA ); | 
 |  | 
 | /** destroys matric */ | 
 | void bts_Int32Mat_exit( struct bbs_Context* cpA, | 
 | 					    struct bts_Int32Mat* ptrA ); | 
 |  | 
 | /* ---- \ghd{ operators } -------------------------------------------------- */ | 
 |  | 
 | /* copies matrices */ | 
 | void bts_Int32Mat_copy( struct bbs_Context* cpA, | 
 | 					    struct bts_Int32Mat* ptrA,  | 
 | 						const struct bts_Int32Mat* srcPtrA ); | 
 |  | 
 | /* ---- \ghd{ query functions } -------------------------------------------- */ | 
 |  | 
 | /* ---- \ghd{ modify functions } ------------------------------------------- */ | 
 |  | 
 | /** allocates square matrix */ | 
 | void bts_Int32Mat_create( struct bbs_Context* cpA, | 
 | 						  struct bts_Int32Mat* ptrA,  | 
 | 						  int32 widthA, | 
 | 				          struct bbs_MemSeg* mspA ); | 
 |  | 
 | /* ---- \ghd{ memory I/O } ------------------------------------------------- */ | 
 |  | 
 | /** size object needs when written to memory */ | 
 | uint32 bts_Int32Mat_memSize( struct bbs_Context* cpA, | 
 | 							 const struct bts_Int32Mat* ptrA ); | 
 |  | 
 | /** writes object to memory; returns number of bytes written */ | 
 | uint32 bts_Int32Mat_memWrite( struct bbs_Context* cpA, | 
 | 							  const struct bts_Int32Mat* ptrA,  | 
 | 							  uint16* memPtrA ); | 
 |  | 
 | /** reads object from memory; returns number of bytes read */ | 
 | uint32 bts_Int32Mat_memRead( struct bbs_Context* cpA, | 
 | 							 struct bts_Int32Mat* ptrA,  | 
 | 							 const uint16* memPtrA, | 
 | 				             struct bbs_MemSeg* mspA ); | 
 |  | 
 | /* ---- \ghd{ exec functions } --------------------------------------------- */ | 
 |  | 
 | /** computes the solution to  matrix * outVecA = inVecA,  returns false if the | 
 |  *	function was not successful; | 
 |  *	internally calls solve2() which is overflow safe; | 
 |  *	use large bbpA if you need high accuracy; | 
 |  * | 
 |  *	matA: the square matrix, array of size ( matWidthA * matWidthA ) | 
 |  *	matWidthA: width of the matrix | 
 |  *  inVecA:  array of size matWidthA | 
 |  *  outVecA: array of size matWidthA | 
 |  *	bbpA: bbp for all matrices and vectors | 
 |  *	tmpMatA: matrix of same size as matA | 
 |  *  tmpVecA: array of size matWidthA | 
 |  */ | 
 | flag bts_Int32Mat_solve( struct bbs_Context* cpA, | 
 | 						 const int32* matA, | 
 | 						 int32 matWidthA, | 
 | 						 const int32* inVecA, | 
 | 						 int32* outVecA, | 
 | 						 int32 bbpA, | 
 | 						 int32* tmpMatA, | 
 | 						 int32* tmpVecA ); | 
 |  | 
 | /**	same as _solve(), but matA gets overwritten, and tmpMatA is not needed: | 
 |  *	saves memory when matA is large; | 
 |  *	overflow safe; | 
 |  *	use large bbpA if you need high accuracy; | 
 |  */ | 
 | flag bts_Int32Mat_solve2( struct bbs_Context* cpA, | 
 | 						  int32* matA, | 
 | 						  int32 matWidthA, | 
 | 						  const int32* inVecA, | 
 | 						  int32* outVecA, | 
 | 						  int32 bbpA, | 
 | 						  int32* tmpVecA ); | 
 |  | 
 | #endif /* bts_INT32MAT_EM_H */ | 
 |  |