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/* ---- includes ----------------------------------------------------------- */
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Math.h"
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/IdCluster2D.h"
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ auxiliary functions } ---------------------------------------- */
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor / destructor } ----------------------------------- */
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_init( struct bbs_Context* cpA,
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   struct bts_IdCluster2D* ptrA )
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_init( cpA, &ptrA->clusterE );
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_Int16Arr_init( cpA, &ptrA->idArrE );
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_exit( struct bbs_Context* cpA,
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   struct bts_IdCluster2D* ptrA )
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_exit( cpA, &ptrA->clusterE );
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_Int16Arr_exit( cpA, &ptrA->idArrE );
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_copy( struct bbs_Context* cpA,
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   struct bts_IdCluster2D* ptrA,
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   const struct bts_IdCluster2D* srcPtrA )
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_copy( cpA, &ptrA->clusterE, &srcPtrA->clusterE );
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_Int16Arr_copy( cpA, &ptrA->idArrE, &srcPtrA->idArrE );
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bts_IdCluster2D_equal( struct bbs_Context* cpA,
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    const struct bts_IdCluster2D* ptrA,
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							const struct bts_IdCluster2D* srcPtrA )
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( !bts_Cluster2D_equal( cpA, &ptrA->clusterE, &srcPtrA->clusterE ) ) return FALSE;
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( !bbs_Int16Arr_equal( cpA, &ptrA->idArrE, &srcPtrA->idArrE ) ) return FALSE;
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return TRUE;
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_IdCluster2D_center( struct bbs_Context* cpA,
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											  const struct bts_IdCluster2D* ptrA )
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bts_Cluster2D_center( cpA, &ptrA->clusterE );
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Int16Rect bts_IdCluster2D_boundingBox( struct bbs_Context* cpA,
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												  const struct bts_IdCluster2D* ptrA )
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bts_Cluster2D_boundingBox( cpA, &ptrA->clusterE );
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_create( struct bbs_Context* cpA,
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							 struct bts_IdCluster2D* ptrA,
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							 uint32 sizeA,
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						     struct bbs_MemSeg* mspA )
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( bbs_Context_error( cpA ) ) return;
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_create( cpA, &ptrA->clusterE, sizeA, mspA );
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_Int16Arr_create( cpA, &ptrA->idArrE, sizeA, mspA );
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_size( struct bbs_Context* cpA,
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   struct bts_IdCluster2D* ptrA,
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   uint32 sizeA )
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_size( cpA, &ptrA->clusterE, sizeA );
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_Int16Arr_size( cpA, &ptrA->idArrE, sizeA );
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_transform( struct bbs_Context* cpA,
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    struct bts_IdCluster2D* ptrA,
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								struct bts_Flt16Alt2D altA )
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_transform( cpA, &ptrA->clusterE, altA );
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_copyTransform( struct bbs_Context* cpA,
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								    struct bts_IdCluster2D* ptrA,
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									const struct bts_IdCluster2D* srcPtrA,
1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									struct bts_Flt16Alt2D altA,
1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									uint32 dstBbpA )
1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_copyTransform( cpA, &ptrA->clusterE, &srcPtrA->clusterE, altA, dstBbpA );
1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_Int16Arr_copy( cpA, &ptrA->idArrE, &srcPtrA->idArrE );
1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */
1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_IdCluster2D_memSize( struct bbs_Context* cpA,
1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    const struct bts_IdCluster2D *ptrA )
1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return  bbs_SIZEOF16( uint32 )
1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  + bbs_SIZEOF16( uint32 ) /* version */
1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  +	bts_Cluster2D_memSize( cpA, &ptrA->clusterE )
1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  + bbs_Int16Arr_memSize( cpA, &ptrA->idArrE );
1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_IdCluster2D_memWrite( struct bbs_Context* cpA,
1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								 const struct bts_IdCluster2D* ptrA,
1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								 uint16* memPtrA )
1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 memSizeL = bts_IdCluster2D_memSize( cpA, ptrA );
1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memWrite32( &memSizeL, memPtrA );
1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memWriteUInt32( bts_ID_CLUSTER2D_VERSION, memPtrA );
1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bts_Cluster2D_memWrite( cpA, &ptrA->clusterE, memPtrA );
1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->idArrE, memPtrA );
1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return memSizeL;
1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_IdCluster2D_memRead( struct bbs_Context* cpA,
1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    struct bts_IdCluster2D* ptrA,
1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    const uint16* memPtrA,
1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						        struct bbs_MemSeg* mspA )
1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 memSizeL;
2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 versionL;
2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( bbs_Context_error( cpA ) ) return 0;
2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memRead32( &memSizeL, memPtrA );
2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memReadVersion32( cpA, &versionL, bts_ID_CLUSTER2D_VERSION, memPtrA );
2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bts_Cluster2D_memRead( cpA, &ptrA->clusterE, memPtrA, mspA );
2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->idArrE, memPtrA, mspA );
2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( memSizeL != bts_IdCluster2D_memSize( cpA, ptrA ) )
2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_IdCluster2D_memRead( const struct bts_IdCluster2D* ptrA, const void* memPtrA ):\n"
2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project                   "size mismatch" );
2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return 0;
2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return memSizeL;
2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_IdCluster2D_convertToEqivalentClusters( struct bbs_Context* cpA,
2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												 const struct bts_IdCluster2D* inCluster1PtrA,
2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												 const struct bts_IdCluster2D* inCluster2PtrA,
2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												 struct bts_Cluster2D* outCluster1PtrA,
2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												 struct bts_Cluster2D* outCluster2PtrA )
2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL, jL;
2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 countL = 0;
2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 size1L = inCluster1PtrA->clusterE.sizeE;
2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 size2L = inCluster2PtrA->clusterE.sizeE;
2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const int16* idArr1L = inCluster1PtrA->idArrE.arrPtrE;
2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const int16* idArr2L = inCluster2PtrA->idArrE.arrPtrE;
2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const struct bts_Int16Vec2D* srcVecArr1E = inCluster1PtrA->clusterE.vecArrE;
2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const struct bts_Int16Vec2D* srcVecArr2E = inCluster2PtrA->clusterE.vecArrE;
2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bts_Int16Vec2D* dstVecArr1E = outCluster1PtrA->vecArrE;
2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bts_Int16Vec2D* dstVecArr2E = outCluster2PtrA->vecArrE;
2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxOutSizeL = bbs_min( outCluster1PtrA->allocatedSizeE, outCluster2PtrA->allocatedSizeE );
2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_size( cpA, outCluster1PtrA, maxOutSizeL );
2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_size( cpA, outCluster2PtrA, maxOutSizeL );
2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < size1L; iL++ )
2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		int32 idL = idArr1L[ iL ];
2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( idL >= 0 )
2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			for( jL = 0; jL < size2L; jL++ )
2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			{
2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				if( idL == idArr2L[ jL ] ) break;
2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			}
2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			if( jL < size2L )
2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			{
2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				if( countL == maxOutSizeL )
2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					bbs_ERROR0( "void bts_IdCluster2D_convertToEqivalentClusters( .... ):\n"
2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						       "Destination clusters are insufficiently allocated" );
2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					return;
2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				dstVecArr1E[ countL ] = srcVecArr1E[ iL ];
2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				dstVecArr2E[ countL ] = srcVecArr2E[ jL ];
2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				countL++;
2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			}
2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_size( cpA, outCluster1PtrA, countL );
2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_Cluster2D_size( cpA, outCluster2PtrA, countL );
2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	outCluster1PtrA->bbpE = inCluster1PtrA->clusterE.bbpE;
2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	outCluster2PtrA->bbpE = inCluster2PtrA->clusterE.bbpE;
2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Alt2D bts_IdCluster2D_alt( struct bbs_Context* cpA,
2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										   const struct bts_IdCluster2D* srcPtrA,
2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										   struct bts_IdCluster2D* dstPtrA,
2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										   enum bts_AltType altTypeA,
2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										   struct bts_Cluster2D* tmpPtr1A,  /* temporary cluster 1 */
2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										   struct bts_Cluster2D* tmpPtr2A ) /* temporary cluster 2 */
2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bts_IdCluster2D_convertToEqivalentClusters( cpA, srcPtrA, dstPtrA, tmpPtr1A, tmpPtr2A );
2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bts_Cluster2D_alt( cpA, tmpPtr1A, tmpPtr2A, altTypeA );
2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
302