projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
removed unused setup option 'soft_scrolling'
[rocksndiamonds.git]
/
src
/
libgame
/
snapshot.c
diff --git
a/src/libgame/snapshot.c
b/src/libgame/snapshot.c
index f57cb5fa6dd757f8de167541aecaaf77006d54be..43a42c34d50920813717c73314337aba168a6ad8 100644
(file)
--- a/
src/libgame/snapshot.c
+++ b/
src/libgame/snapshot.c
@@
-18,11
+18,15
@@
static ListNode *snapshot_current = NULL;
static int num_snapshots_in_list = 0;
static int num_snapshots_in_list = 0;
-
#ifdef DEBUG
#define DEBUG_SNAPSHOTS 0
#endif
#ifdef DEBUG
#define DEBUG_SNAPSHOTS 0
#endif
+#if DEBUG_SNAPSHOTS
+static int num_snapshot_buffers = 0;
+static int num_snapshot_bytes = 0;
+#endif
+
// -----------------------------------------------------------------------------
// functions for handling buffers for a single snapshot
// -----------------------------------------------------------------------------
// functions for handling buffers for a single snapshot
@@
-40,6
+44,11
@@
void SaveSnapshotBuffer(ListNode **snapshot_buffers, void *buffer, int size)
memcpy(bi->buffer_copy, buffer, size);
addNodeToList(snapshot_buffers, NULL, bi);
memcpy(bi->buffer_copy, buffer, size);
addNodeToList(snapshot_buffers, NULL, bi);
+
+#if DEBUG_SNAPSHOTS
+ num_snapshot_buffers++;
+ num_snapshot_bytes += size;
+#endif
}
static void LoadSnapshotBuffer(struct SnapshotNodeInfo *bi)
}
static void LoadSnapshotBuffer(struct SnapshotNodeInfo *bi)
@@
-57,17
+66,30
@@
void LoadSnapshotBuffers(ListNode *snapshot_buffers)
}
}
}
}
+static void FreeSnapshotBuffer(void *bi_raw)
+{
+ struct SnapshotNodeInfo *bi = (struct SnapshotNodeInfo *)bi_raw;
+
+#if DEBUG_SNAPSHOTS
+ num_snapshot_buffers--;
+ num_snapshot_bytes -= bi->size;
+#endif
+
+ checked_free(bi->buffer_copy);
+ checked_free(bi);
+}
+
void FreeSnapshotBuffers(ListNode *snapshot_buffers)
{
while (snapshot_buffers != NULL)
void FreeSnapshotBuffers(ListNode *snapshot_buffers)
{
while (snapshot_buffers != NULL)
- deleteNodeFromList(&snapshot_buffers,
snapshot_buffers->key, checked_free
);
+ deleteNodeFromList(&snapshot_buffers,
NULL, FreeSnapshotBuffer
);
}
// -----------------------------------------------------------------------------
}
// -----------------------------------------------------------------------------
-// functions for handling
one of several
snapshots
+// functions for handling
single shapshot or list of
snapshots
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
-static void FreeSnapshot
Ext
(void *snapshot_buffers_ptr)
+static void FreeSnapshot(void *snapshot_buffers_ptr)
{
FreeSnapshotBuffers(snapshot_buffers_ptr);
}
{
FreeSnapshotBuffers(snapshot_buffers_ptr);
}
@@
-79,11
+101,16
@@
void FreeSnapshotSingle()
snapshot_single = NULL;
}
snapshot_single = NULL;
}
-void FreeSnapshotList_UpToNode(ListNode *node)
+
static
void FreeSnapshotList_UpToNode(ListNode *node)
{
while (snapshot_list != node)
{
{
while (snapshot_list != node)
{
- deleteNodeFromList(&snapshot_list, snapshot_list->key, FreeSnapshotExt);
+#if DEBUG_SNAPSHOTS
+ printf("::: FreeSnapshotList_*() [%s, %d, %d]\n",
+ snapshot_list->key, num_snapshot_buffers, num_snapshot_bytes);
+#endif
+
+ deleteNodeFromList(&snapshot_list, snapshot_list->key, FreeSnapshot);
num_snapshots_in_list--;
}
num_snapshots_in_list--;
}
@@
-91,6
+118,10
@@
void FreeSnapshotList_UpToNode(ListNode *node)
void FreeSnapshotList()
{
void FreeSnapshotList()
{
+#if DEBUG_SNAPSHOTS
+ printf("::: FreeSnapshotList()\n");
+#endif
+
FreeSnapshotList_UpToNode(NULL);
snapshot_current = NULL;
FreeSnapshotList_UpToNode(NULL);
snapshot_current = NULL;
@@
-117,7
+148,8
@@
void SaveSnapshotToList(ListNode *snapshot_buffers)
num_snapshots_in_list++;
#if DEBUG_SNAPSHOTS
num_snapshots_in_list++;
#if DEBUG_SNAPSHOTS
- printf("::: SaveSnapshotToList() [%s]\n", snapshot_current->key);
+ printf("::: SaveSnapshotToList() [%s, %d, %d]\n",
+ snapshot_current->key, num_snapshot_buffers, num_snapshot_bytes);
#endif
}
#endif
}
@@
-133,11
+165,12
@@
boolean LoadSnapshotSingle()
return FALSE;
}
return FALSE;
}
-boolean LoadSnapshotFromList_Older()
+boolean LoadSnapshotFromList_Older(
int steps
)
{
{
- if (snapshot_current->next)
+ if (snapshot_current
&& snapshot_current
->next)
{
{
- snapshot_current = snapshot_current->next;
+ while (snapshot_current->next && steps--)
+ snapshot_current = snapshot_current->next;
LoadSnapshotBuffers(snapshot_current->content);
LoadSnapshotBuffers(snapshot_current->content);
@@
-151,11
+184,12
@@
boolean LoadSnapshotFromList_Older()
return FALSE;
}
return FALSE;
}
-boolean LoadSnapshotFromList_Newer()
+boolean LoadSnapshotFromList_Newer(
int steps
)
{
{
- if (snapshot_current->prev)
+ if (snapshot_current
&& snapshot_current
->prev)
{
{
- snapshot_current = snapshot_current->prev;
+ while (snapshot_current->prev && steps--)
+ snapshot_current = snapshot_current->prev;
LoadSnapshotBuffers(snapshot_current->content);
LoadSnapshotBuffers(snapshot_current->content);
@@
-168,3
+202,8
@@
boolean LoadSnapshotFromList_Newer()
return FALSE;
}
return FALSE;
}
+
+boolean CheckSnapshotList()
+{
+ return (snapshot_list ? TRUE : FALSE);
+}