diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-12-15 10:24:49 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-12-15 10:24:49 +0000 |
| commit | a2566b3ebd93e0bbc55a920a7be08054a9377f11 (patch) | |
| tree | 44a4612805d894168fe4b3b4c065fccc1a1686e9 /src/engine/e_snapshot.h | |
| parent | ac9873056aa1fe529b098f19ff31e9ffa0e016a2 (diff) | |
| download | zcatch-a2566b3ebd93e0bbc55a920a7be08054a9377f11.tar.gz zcatch-a2566b3ebd93e0bbc55a920a7be08054a9377f11.zip | |
cleaned up code structure a bit
Diffstat (limited to 'src/engine/e_snapshot.h')
| -rw-r--r-- | src/engine/e_snapshot.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/engine/e_snapshot.h b/src/engine/e_snapshot.h new file mode 100644 index 00000000..0a74b0dc --- /dev/null +++ b/src/engine/e_snapshot.h @@ -0,0 +1,91 @@ +/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ +#ifndef ENGINE_SNAPSHOT_H +#define ENGINE_SNAPSHOT_H + +#include "e_system.h" + +/* SNAPSHOT */ + +enum +{ + MAX_SNAPSHOT_SIZE=64*1024 +}; + +typedef struct +{ + int type_and_id; +} SNAPSHOT_ITEM; + +typedef struct +{ + int data_size; + int num_items; +} SNAPSHOT; + +int *snapitem_data(SNAPSHOT_ITEM *item); +int snapitem_type(SNAPSHOT_ITEM *item); +int snapitem_id(SNAPSHOT_ITEM *item); +int snapitem_key(SNAPSHOT_ITEM *item); + +int *snapshot_offsets(SNAPSHOT *snap); +char *snapshot_datastart(SNAPSHOT *snap); + +SNAPSHOT_ITEM *snapshot_get_item(SNAPSHOT *snap, int index); +int snapshot_get_item_datasize(SNAPSHOT *snap, int index); +int snapshot_get_item_index(SNAPSHOT *snap, int key); + +void *snapshot_empty_delta(); +int snapshot_crc(SNAPSHOT *snap); +void snapshot_debug_dump(SNAPSHOT *snap); +int snapshot_create_delta(SNAPSHOT *from, SNAPSHOT *to, void *data); +int snapshot_unpack_delta(SNAPSHOT *from, SNAPSHOT *to, void *data, int data_size); + +/* SNAPSTORAGE */ + +typedef struct SNAPSTORAGE_HOLDER_t +{ + struct SNAPSTORAGE_HOLDER_t *prev; + struct SNAPSTORAGE_HOLDER_t *next; + + int64 tagtime; + int tick; + + int snap_size; + SNAPSHOT *snap; +} SNAPSTORAGE_HOLDER; + +typedef struct SNAPSTORAGE_t +{ + SNAPSTORAGE_HOLDER *first; + SNAPSTORAGE_HOLDER *last; +} SNAPSTORAGE; + +void snapstorage_init(SNAPSTORAGE *ss); +void snapstorage_purge_all(SNAPSTORAGE *ss); +void snapstorage_purge_until(SNAPSTORAGE *ss, int tick); +void snapstorage_add(SNAPSTORAGE *ss, int tick, int64 tagtime, int data_size, void *data); +int snapstorage_get(SNAPSTORAGE *ss, int tick, int64 *tagtime, SNAPSHOT **data); + +/* SNAPBUILD */ + +enum +{ + SNAPBUILD_MAX_ITEMS = 512 +}; + +typedef struct SNAPBUILD +{ + char data[MAX_SNAPSHOT_SIZE]; + int data_size; + + int offsets[SNAPBUILD_MAX_ITEMS]; + int num_items; +} SNAPBUILD; + +void snapbuild_init(SNAPBUILD *sb); +SNAPSHOT_ITEM *snapbuild_get_item(SNAPBUILD *sb, int index); +int *snapbuild_get_item_data(SNAPBUILD *sb, int key); +int snapbuild_finish(SNAPBUILD *sb, void *snapdata); +void *snapbuild_new_item(SNAPBUILD *sb, int type, int id, int size); + +#endif /* ENGINE_SNAPSHOT_H */ |