/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at
golgotha_source@usa.net (Subject should have "GOLG" in it)
***********************************************************************/
#ifndef G1_SAVER_HH
#define G1_SAVER_HH
#include "file/file.hh"
#include "memory/growarry.hh"
#include "path.hh"
#include "reference.hh"
#include "loaders/dir_load.hh"
#include "loaders/dir_save.hh"
#include "lisp/li_types.hh"
#include "global_id.hh"
class g1_path_saver_class;
class g1_object_class;
struct g1_saver_section_type
{
w16 section_id;
w32 section_offset;
g1_saver_section_type(w16 section_id, w32 section_offset)
: section_offset(section_offset), section_id(section_id) {}
};
class g1_saver_class : public i4_saver_class
{
g1_object_class **ref_list;
w32 t_refs;
g1_global_id_manager_class::remapper *remap;
public:
g1_saver_class(i4_file_class *out, i4_bool close_on_delete=i4_T);
~g1_saver_class();
void set_helpers(g1_object_class **reference_list, w32 total_references);
virtual i4_bool write_reference(const g1_reference_class &ref);
i4_bool write_global_id(w32 id);
};
class g1_loader_class : public i4_loader_class
{
g1_object_class **ref_list;
w32 t_refs;
g1_reference_class *first_ref;
w32 *id_remap;
public:
li_type_number *li_remap; // used to load lisp objects
i4_bool references_were_loaded() { return first_ref!=0; }
g1_loader_class(i4_file_class *in, i4_bool close_on_delete=i4_T);
void set_remap(w32 total_refs);
void end_remap();
void set_helpers(g1_object_class **reference_list, w32 total_references);
void read_reference(g1_reference_class &ref);
w32 read_global_id();
// called by level loader after all objects have been loaded
void convert_references();
~g1_loader_class();
};
// returns NULL if file is corrupted
g1_loader_class *g1_open_save_file(i4_file_class *in,
i4_bool close_on_delete_or_fail=i4_T);
#endif