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/Context.h"
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/MemTbl.h"
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Functions.h"
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/*                                                                           */
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ auxiliary functions } ---------------------------------------- */
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 Projectflag bbs_MemTbl_memOverlap( const uint16* memPtr1A, uint32 size1A,
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    const uint16* memPtr2A, uint32 size2A )
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 diffL = memPtr2A - memPtr1A;
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( diffL >= 0 && diffL < ( int32 )size1A ) return TRUE;
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	diffL += ( int32 )size2A;
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( diffL >= 0 && diffL < ( int32 )size1A ) return TRUE;
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return FALSE;
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor / destructor } ----------------------------------- */
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbs_MemTbl_init( struct bbs_Context* cpA,
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  struct bbs_MemTbl* ptrA )
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < bbs_MAX_MEM_SEGS; iL++ )
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_MemSeg_init( cpA, &ptrA->esArrE[ iL ] );
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_MemSeg_init( cpA, &ptrA->ssArrE[ iL ] );
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		ptrA->espArrE[ iL ] = NULL;
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esSizeE = 0;
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->ssSizeE = 0;
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbs_MemTbl_exit( struct bbs_Context* cpA,
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  struct bbs_MemTbl* ptrA )
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < bbs_MAX_MEM_SEGS; iL++ )
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_MemSeg_exit( cpA, &ptrA->esArrE[ iL ] );
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_MemSeg_exit( cpA, &ptrA->ssArrE[ iL ] );
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		ptrA->espArrE[ iL ] = NULL;
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esSizeE = 0;
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->ssSizeE = 0;
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
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/* ---- \ghd{ operators } -------------------------------------------------- */
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
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 Project/* ---- \ghd{ query functions } -------------------------------------------- */
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbs_MemTbl_overlap( struct bbs_Context* cpA,
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 struct bbs_MemTbl* ptrA,
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						 const void* memPtrA, uint32 sizeA )
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->esSizeE; iL++ )
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( bbs_MemTbl_memOverlap( ptrA->espArrE[ iL ]->memPtrE,
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								   ptrA->espArrE[ iL ]->sizeE,
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								   memPtrA, sizeA ) )
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return TRUE;
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->ssSizeE; iL++ )
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( bbs_MemTbl_memOverlap( ptrA->ssArrE[ iL ].memPtrE,
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								   ptrA->ssArrE[ iL ].sizeE,
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								   memPtrA, sizeA ) )
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return TRUE;
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return FALSE;
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbs_MemTbl_create( struct bbs_Context* cpA,
1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					    struct bbs_MemTbl* ptrA,
1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						void* memPtrA,
1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						uint32 sizeA,
1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						uint32 sharedSubSizeA )
1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( sharedSubSizeA > sizeA )
1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemTbl bbs_MemTbl_create( void* memPtrA, uint32 sizeA, uint32 sharedSubSizeA ):\n"
1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "sharedSubSizeA > sizeA" );
1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_MemTbl_init( cpA, ptrA );
1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esArrE[ 0 ] = bbs_MemSeg_create( cpA, memPtrA, sizeA - sharedSubSizeA );
1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	#ifdef HW_TMS320C5x
1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		ptrA->ssArrE[ 0 ] = bbs_MemSeg_createShared( cpA, ( uint16* ) ( ( int32 ) ( ( uint16* )memPtrA ) + sizeA - sharedSubSizeA ), sharedSubSizeA );
1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	#else
1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		ptrA->ssArrE[ 0 ] = bbs_MemSeg_createShared( cpA, ( uint16* )memPtrA + sizeA - sharedSubSizeA, sharedSubSizeA );
1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	#endif
1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->espArrE[ 0 ] = &ptrA->esArrE[ 0 ];
1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esSizeE = 1;
1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->ssSizeE = 1;
1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbs_MemTbl_add( struct bbs_Context* cpA,
1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					 struct bbs_MemTbl* ptrA,
1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					 void* memPtrA,
1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					 uint32 sizeA,
1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					 uint32 idA )
1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->esSizeE == bbs_MAX_MEM_SEGS )
1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "void bbs_MemTbl_add( struct bbs_MemTbl* ptrA, void* memPtrA, uint32 sizeA ):\n"
1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "Table is full! Increase constant bbs_MAX_MEM_SEGS" );
1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esArrE[ ptrA->esSizeE ] = bbs_MemSeg_create( cpA, memPtrA, sizeA );
1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esArrE[ ptrA->esSizeE ].idE = idA;
1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->espArrE[ ptrA->esSizeE ] = &ptrA->esArrE[ ptrA->esSizeE ];
1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->esSizeE++;
2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbs_MemTbl_addShared( struct bbs_Context* cpA,
2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   struct bbs_MemTbl* ptrA,
2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   void* memPtrA,
2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   uint32 sizeA,
2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   uint32 idA )
2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->ssSizeE == bbs_MAX_MEM_SEGS )
2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "void bbs_MemTbl_addShared( struct bbs_MemTbl* ptrA, void* memPtrA, uint32 sizeA ):\n"
2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "Table is full! Increase constant bbs_MAX_MEM_SEGS" );
2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->ssArrE[ ptrA->ssSizeE ] = bbs_MemSeg_createShared( cpA, memPtrA, sizeA );
2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->ssArrE[ ptrA->ssSizeE ].idE = idA;
2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->ssSizeE++;
2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbs_MemSeg* bbs_MemTbl_segPtr( struct bbs_Context* cpA,
2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									  struct bbs_MemTbl* ptrA,
2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project									  uint32 idA )
2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->esSizeE == 0 )
2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "bbs_MemTbl_segPtr(): Table contains no exclusive segments." );
2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( idA > 0 )
2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = 0; iL < ptrA->esSizeE; iL++ )
2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			if( idA == ptrA->espArrE[ iL ]->idE ) return ptrA->espArrE[ iL ];
2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->esSizeE; iL++ )
2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( ptrA->espArrE[ iL ]->sizeE > 0 ||
2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			ptrA->espArrE[ iL ]->dynMemManagerPtrE != 0 )
2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return ptrA->espArrE[ iL ];
2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW,
2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			  "bbs_MemTbl_segPtr(): Table contains no valid exclusive segments." );
2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return 0;
2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbs_MemSeg* bbs_MemTbl_sharedSegPtr( struct bbs_Context* cpA,
2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										    struct bbs_MemTbl* ptrA,
2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											uint32 idA )
2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->ssSizeE == 0 )
2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "bbs_MemTbl_sharedSegPtr(): Table contains no shared segments." );
2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( idA > 0 )
2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = 0; iL < ptrA->ssSizeE; iL++ )
2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			if( idA == ptrA->ssArrE[ iL ].idE ) return &ptrA->ssArrE[ iL ];
2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->ssSizeE; iL++ )
2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( ptrA->ssArrE[ iL ].sizeE > 0 ||
2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			ptrA->ssArrE[ iL ].dynMemManagerPtrE != 0 )
2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return &ptrA->ssArrE[ iL ];
2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW,
2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			  "bbs_MemTbl_sharedSegPtr(): Table contains no valid shared segments." );
2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return 0;
2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_Context* cpA,
2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											 struct bbs_MemTbl* ptrA,
2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											 uint32 minSizeA )
2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->esSizeE; iL++ )
2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( bbs_MemSeg_availableSize( cpA, ptrA->espArrE[ iL ] ) >= minSizeA ) break;
2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( iL == ptrA->esSizeE )
2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( ptrA->esSizeE == 0 )
2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n"
3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					   "Table contains no exclusive segments" );
3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return NULL;
3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		else
3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW,
3077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n"
3087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  "Could not find segment with sufficient free space" );
3097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return NULL;
3107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->espArrE[ iL ]->sharedE )
3137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n"
3157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "Table corrupt: Found shared segment in exclusive table" );
3167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
3177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return ptrA->espArrE[ iL ];
3207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
3217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
3237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_Context* cpA,
3257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											 struct bbs_MemTbl* ptrA )
3267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
3277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
3287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxIndexL = 0;
3297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxSizeL = 0;
3307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->esSizeE == 0 )
3327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_MemTbl* ptrA ):\n"
3347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "No exclusive segments available" );
3357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
3367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->esSizeE; iL++ )
3397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint32 sizeL = bbs_MemSeg_availableSize( cpA, ptrA->espArrE[ iL ] );
3417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( sizeL > maxSizeL )
3427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			maxSizeL = sizeL;
3447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			maxIndexL = iL;
3457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->espArrE[ maxIndexL ]->sharedE )
3497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSegPtr( struct bbs_MemTbl* ptrA ):\n"
3517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "Table corrupt: Found shared segment in exclusive table" );
3527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
3537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return ptrA->espArrE[ maxIndexL ];
3567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
3577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
3597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_Context* cpA,
3617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												   struct bbs_MemTbl* ptrA,
3627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												   uint32 minSizeA )
3637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
3647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
3657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->ssSizeE; iL++ )
3667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( bbs_MemSeg_availableSize( cpA, &ptrA->ssArrE[ iL ] ) >= minSizeA ) break;
3687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( iL == ptrA->ssSizeE )
3707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( ptrA->esSizeE == 0 )
3727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n"
3747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					   "Table contains no shared segments" );
3757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return NULL;
3767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		else
3787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
3797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			bbs_ERR0( bbs_ERR_MEMORY_OVERFLOW,
3807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  "struct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n"
3817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					  "Could not find segment with sufficient free space" );
3827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return NULL;
3837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
3847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( !ptrA->ssArrE[ iL ].sharedE )
3867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_fastestSharedSegPtr( struct bbs_MemTbl* ptrA, uint32 minSizeA ):\n"
3887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "Table corrupt: Found exclusive segment in shared table" );
3897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
3907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return &ptrA->ssArrE[ iL ];
3937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
3947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
3967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_Context* cpA,
3987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project												   struct bbs_MemTbl* ptrA )
3997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
4007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
4017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxIndexL = 0;
4027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 maxSizeL = 0;
4037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->ssSizeE == 0 )
4057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
4067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_MemTbl* ptrA ):\n"
4077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "No shared segments available" );
4087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
4097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
4107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = 0; iL < ptrA->ssSizeE; iL++ )
4127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
4137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		uint32 sizeL = bbs_MemSeg_availableSize( cpA, &ptrA->ssArrE[ iL ] );
4147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( sizeL > maxSizeL )
4157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			maxSizeL = sizeL;
4177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			maxIndexL = iL;
4187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
4207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( !ptrA->ssArrE[ maxIndexL ].sharedE )
4227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
4237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "struct bbs_MemSeg* bbs_MemTbl_largestSharedSegPtr( struct bbs_MemTbl* ptrA ):\n"
4247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			       "Table corrupt: Found exclusive segment in shared table" );
4257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return NULL;
4267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
4277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return &ptrA->ssArrE[ maxIndexL ];
4297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
4307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
4327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
4347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
436