static GHashTable *cache = NULL;
#define HASHKEY_FORMAT_STRING "%d-%d-%d-%d-%d-%d-%.3f-%.3f"
-#define HASHKEY_FORMAT_STRING_NOSHRINK "%d-%d-%d-%d-%d-%d-"
+#define HASHKEY_FORMAT_STRING_NOSHRINK_NOR_ALPHA "%d-%d-%d-%d-%d-"
void a_mapcache_init ()
{
queue_count --;
g_hash_table_remove ( cache, oldkey );
+ /* should delete BEFORE adding -- not really possible because don't know size,
+ * but you could guess size (only applic if add big file to full cache) */
+
+
while ( queue_size > VIK_CONFIG_MAPCACHE_SIZE &&
(queue_tail->next != queue_tail) ) { /* make sure there's more than one thing to delete */
oldkey = list_shift ();
/* business as usual */
}
- if ( (++tmp == 100 )) { g_print("DEBUG: queue count=%d %ld\n", queue_count, queue_size ); tmp=0; }
+ if ( (++tmp == 100 )) { g_print("DEBUG: queue count=%d %u\n", queue_count, queue_size ); tmp=0; }
}
GdkPixbuf *a_mapcache_get ( gint x, gint y, gint z, guint8 type, guint zoom, guint8 alpha, gdouble xshrinkfactor, gdouble yshrinkfactor )
return g_hash_table_lookup ( cache, key );
}
-void a_mapcache_remove_all_shrinkfactors ( guint16 x, guint16 y, guint16 z, guint8 type, guint zoom, guint8 alpha )
+void a_mapcache_remove_all_shrinkfactors ( gint x, gint y, gint z, guint8 type, guint zoom )
{
char key[40];
List *loop = queue_tail;
if ( queue_tail == NULL )
return;
- g_snprintf ( key, sizeof(key), HASHKEY_FORMAT_STRING_NOSHRINK, x, y, z, type, zoom, alpha );
+ g_snprintf ( key, sizeof(key), HASHKEY_FORMAT_STRING_NOSHRINK_NOR_ALPHA, x, y, z, type, zoom );
len = strlen(key);
/* TODO: check logic here */
if ( strncmp(tmp->key, key, len) == 0 )
{
g_hash_table_remove ( cache, tmp->key );
- if ( tmp == loop )
+ if ( tmp == loop ) /* we deleted the last thing in the queue! */
loop = queue_tail = NULL;
- else
+ else {
loop->next = tmp->next;
+ if ( tmp == queue_tail )
+ queue_tail = tmp->next;
+ }
g_free ( tmp );
tmp = NULL;
}