update for new complete_pointers() rules

This commit is contained in:
David Rose 2002-03-08 00:41:57 +00:00
parent b524ab6b27
commit f8d082a208
7 changed files with 68 additions and 45 deletions

View File

@ -572,23 +572,25 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
////////////////////////////////////////////////////////////////////
int EggFile::
complete_pointers(TypedWritable **p_list, BamReader *manager) {
int index = TypedWritable::complete_pointers(p_list, manager);
int pi = TypedWritable::complete_pointers(p_list, manager);
int i;
_textures.reserve(_num_textures);
for (i = 0; i < _num_textures; i++) {
TextureReference *texture;
DCAST_INTO_R(texture, p_list[index], index);
DCAST_INTO_R(texture, p_list[pi], pi);
_textures.push_back(texture);
index++;
pi++;
}
if (p_list[index] != (TypedWritable *)NULL) {
DCAST_INTO_R(_default_group, p_list[index], index);
}
index++;
pi += _explicitly_assigned_groups.complete_pointers(p_list + pi, manager);
return index;
if (p_list[pi] != (TypedWritable *)NULL) {
DCAST_INTO_R(_default_group, p_list[pi], pi);
}
pi++;
return pi;
}
////////////////////////////////////////////////////////////////////

View File

@ -419,6 +419,24 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
datagram.add_int32(_y_size);
}
////////////////////////////////////////////////////////////////////
// Function: ImageFile::complete_pointers
// Access: Public, Virtual
// Description: Called after the object is otherwise completely read
// from a Bam file, this function's job is to store the
// pointers that were retrieved from the Bam file for
// each pointer object written. The return value is the
// number of pointers processed from the list.
////////////////////////////////////////////////////////////////////
int ImageFile::
complete_pointers(TypedWritable **p_list, BamReader *manager) {
int pi = TypedWritable::complete_pointers(p_list, manager);
pi += _properties.complete_pointers(p_list + pi, manager);
return pi;
}
////////////////////////////////////////////////////////////////////
// Function: ImageFile::fillin
// Access: Protected

View File

@ -77,6 +77,8 @@ protected:
// The TypedWritable interface follows.
public:
virtual void write_datagram(BamWriter *writer, Datagram &datagram);
virtual int complete_pointers(TypedWritable **p_list,
BamReader *manager);
protected:
void fillin(DatagramIterator &scan, BamReader *manager);

View File

@ -633,15 +633,16 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
////////////////////////////////////////////////////////////////////
int PaletteGroup::
complete_pointers(TypedWritable **p_list, BamReader *manager) {
int index = TypedWritable::complete_pointers(p_list, manager);
int pi = TypedWritable::complete_pointers(p_list, manager);
pi += _dependent.complete_pointers(p_list + pi, manager);
int i;
for (i = 0; i < _num_placements; i++) {
TexturePlacement *placement;
DCAST_INTO_R(placement, p_list[index], index);
index++;
DCAST_INTO_R(placement, p_list[pi++], pi);
bool inserted = _placements.insert(placement).second;
nassertr(inserted, index);
nassertr(inserted, pi);
}
// We must store the list of pages in a temporary vector first. We
@ -651,12 +652,11 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) {
_load_pages.reserve(_num_pages);
for (i = 0; i < _num_pages; i++) {
PalettePage *page;
DCAST_INTO_R(page, p_list[index], index);
index++;
DCAST_INTO_R(page, p_list[pi++], pi);
_load_pages.push_back(page);
}
return index;
return pi;
}
////////////////////////////////////////////////////////////////////

View File

@ -296,23 +296,24 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
////////////////////////////////////////////////////////////////////
int PalettePage::
complete_pointers(TypedWritable **p_list, BamReader *manager) {
int index = TypedWritable::complete_pointers(p_list, manager);
int pi = TypedWritable::complete_pointers(p_list, manager);
if (p_list[index] != (TypedWritable *)NULL) {
DCAST_INTO_R(_group, p_list[index], index);
if (p_list[pi] != (TypedWritable *)NULL) {
DCAST_INTO_R(_group, p_list[pi], pi);
}
index++;
pi++;
pi += _properties.complete_pointers(p_list + pi, manager);
int i;
_images.reserve(_num_images);
for (i = 0; i < _num_images; i++) {
PaletteImage *image;
DCAST_INTO_R(image, p_list[index], index);
DCAST_INTO_R(image, p_list[pi++], pi);
_images.push_back(image);
index++;
}
return index;
return pi;
}
////////////////////////////////////////////////////////////////////

View File

@ -1173,39 +1173,37 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
////////////////////////////////////////////////////////////////////
int TextureImage::
complete_pointers(TypedWritable **p_list, BamReader *manager) {
int index = ImageFile::complete_pointers(p_list, manager);
int pi = ImageFile::complete_pointers(p_list, manager);
pi += _actual_assigned_groups.complete_pointers(p_list + pi, manager);
int i;
for (i = 0; i < _num_placement; i++) {
PaletteGroup *group;
TexturePlacement *placement;
DCAST_INTO_R(group, p_list[index], index);
index++;
DCAST_INTO_R(placement, p_list[index], index);
index++;
DCAST_INTO_R(group, p_list[pi++], pi);
DCAST_INTO_R(placement, p_list[pi++], pi);
_placement.insert(Placement::value_type(group, placement));
}
for (i = 0; i < _num_sources; i++) {
SourceTextureImage *source;
DCAST_INTO_R(source, p_list[index], index);
DCAST_INTO_R(source, p_list[pi++], pi);
string key = get_source_key(source->get_filename(),
source->get_alpha_filename());
bool inserted = _sources.insert(Sources::value_type(key, source)).second;
index++;
nassertr(inserted, index);
nassertr(inserted, pi);
}
for (i = 0; i < _num_dests; i++) {
DestTextureImage *dest;
DCAST_INTO_R(dest, p_list[index], index);
DCAST_INTO_R(dest, p_list[pi++], pi);
bool inserted = _dests.insert(Dests::value_type(dest->get_filename(), dest)).second;
index++;
nassertr(inserted, index);
nassertr(inserted, pi);
}
return index;
return pi;
}
////////////////////////////////////////////////////////////////////

View File

@ -722,24 +722,26 @@ write_datagram(BamWriter *writer, Datagram &datagram) {
////////////////////////////////////////////////////////////////////
int TextureReference::
complete_pointers(TypedWritable **p_list, BamReader *manager) {
int index = TypedWritable::complete_pointers(p_list, manager);
int pi = TypedWritable::complete_pointers(p_list, manager);
if (p_list[index] != (TypedWritable *)NULL) {
DCAST_INTO_R(_egg_file, p_list[index], index);
if (p_list[pi] != (TypedWritable *)NULL) {
DCAST_INTO_R(_egg_file, p_list[pi], pi);
}
index++;
pi++;
if (p_list[index] != (TypedWritable *)NULL) {
DCAST_INTO_R(_source_texture, p_list[index], index);
if (p_list[pi] != (TypedWritable *)NULL) {
DCAST_INTO_R(_source_texture, p_list[pi], pi);
}
index++;
pi++;
if (p_list[index] != (TypedWritable *)NULL) {
DCAST_INTO_R(_placement, p_list[index], index);
if (p_list[pi] != (TypedWritable *)NULL) {
DCAST_INTO_R(_placement, p_list[pi], pi);
}
index++;
pi++;
return index;
pi += _properties.complete_pointers(p_list + pi, manager);
return pi;
}
////////////////////////////////////////////////////////////////////