/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"


#include <limits.h>     // LONG_MAX
#include <tools/solar.h>
#include <svtools/grfmgr.hxx>
#include "bmcache.hxx"

// eine Struktur fuer die Cache-Eintraege
struct BitmapCacheEntry
{
	const SdPage*   pPage;
    GraphicObject*  pGraphicObject;
    sal_uInt32      nSizeBytes;
	long		    nZoom;
};

/*************************************************************************
|*
|* Destruktor, loescht die gespeicherten Bitmaps
|*
\************************************************************************/

BitmapCache::~BitmapCache()
{
    for( void* pEntry = aEntries.First();  pEntry; pEntry = aEntries.Next() )
    {
		delete static_cast< BitmapCacheEntry* >( pEntry )->pGraphicObject;
		delete static_cast< BitmapCacheEntry* >( pEntry );
    }
}

void BitmapCache::Remove( const SdPage* pPage )
{
	for( sal_uLong nPos = 0; nPos < aEntries.Count();  )
	{
		BitmapCacheEntry* pCand = (BitmapCacheEntry*) aEntries.GetObject( nPos );
		
		if( pCand->pPage == pPage )
		{
			pCand = (BitmapCacheEntry*) aEntries.Remove((sal_uLong)nPos);
			delete pCand->pGraphicObject;
			delete pCand;
		}
		else
			nPos++;
	}
}


