Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

panda/src/putil/test_bam.cxx

Go to the documentation of this file.
00001 // Filename: test_bam.cxx
00002 // Created by:  jason (13Jun00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
00008 //
00009 // All use of this software is subject to the terms of the Panda 3d
00010 // Software license.  You should have received a copy of this license
00011 // along with this source code; you will also find a current copy of
00012 // the license at http://www.panda3d.org/license.txt .
00013 //
00014 // To contact the maintainers of this program write to
00015 // panda3d@yahoogroups.com .
00016 //
00017 ////////////////////////////////////////////////////////////////////
00018 
00019 #include <pandabase.h>
00020 #include <notify.h>
00021 #include <dconfig.h>
00022 
00023 #include "test_bam.h"
00024 
00025 
00026 TypeHandle Person::_type_handle;
00027 TypeHandle Parent::_type_handle;
00028 TypeHandle Child::_type_handle;
00029 
00030 ConfigureFn(config_util)
00031 {
00032   TypedObject::init_type();
00033   ReferenceCount::init_type();
00034   TypedReferenceCount::init_type();
00035   init_system_type_handles();
00036   FactoryParam::init_type();
00037   Datagram::init_type();
00038   TypedWritable::init_type();
00039   WritableParam::init_type();
00040   BamReaderParam::init_type();
00041   TypedWritableReferenceCount::init_type();
00042 
00043   Person::init_type();
00044   Parent::init_type();
00045   Child::init_type();
00046 
00047   BamReader::get_factory()->register_factory(Person::get_class_type(), Person::make_person);
00048   BamReader::get_factory()->register_factory(Parent::get_class_type(), Parent::make_parent);
00049   BamReader::get_factory()->register_factory(Child::get_class_type(), Child::make_child);
00050 }
00051 
00052 void Person::
00053 write_datagram(BamWriter* manager, Datagram &me)
00054 {
00055   //Write out name
00056   me.add_string(_name);
00057   //Write out gender
00058   me.add_uint8(myGender);
00059   manager->write_pointer(me, _bro);
00060   manager->write_pointer(me, _sis);
00061 }
00062 
00063 TypedWritable* Person::
00064 make_person(const FactoryParams &params)
00065 {
00066   Person *me = new Person;
00067   DatagramIterator scan;
00068   BamReader *manager;
00069 
00070   parse_params(params, scan, manager);
00071   me->fillin(me, scan, manager);
00072   return me;
00073 }
00074 
00075 void Person::
00076 fillin(Person* me, DatagramIterator& scan, BamReader* manager)
00077 {
00078   _name = scan.get_string();
00079   myGender = scan.get_uint8();
00080   manager->read_pointer(scan);
00081   manager->read_pointer(scan);
00082 }
00083 
00084 int Person::
00085 complete_pointers(TypedWritable **p_list, BamReader *)
00086 {
00087   _bro = (p_list[0] == TypedWritable::Null) ? (Person*)NULL : DCAST(Person, p_list[0]);
00088   _sis = (p_list[1] == TypedWritable::Null) ? (Person*)NULL : DCAST(Person, p_list[1]);
00089   return 2;
00090 }
00091 
00092 void Person::
00093 print_relationships(void){
00094   nout << "My name is " << _name << endl;
00095   if (_bro != NULL)
00096     nout << "My brother is " << _bro->name() << endl;
00097   if (_sis != NULL)
00098     nout << "My sister is " << _sis->name() << endl;
00099 }
00100 
00101 void Parent::
00102 write_datagram(BamWriter* manager, Datagram &me)
00103 {
00104   Person::write_datagram(manager, me);
00105   manager->write_pointer(me, _son);
00106   manager->write_pointer(me, _daughter);
00107 }
00108 
00109 TypedWritable* Parent::
00110 make_parent(const FactoryParams &params)
00111 {
00112   Parent *me = new Parent;
00113   DatagramIterator scan;
00114   BamReader *manager;
00115 
00116   parse_params(params, scan, manager);
00117   me->fillin(me, scan, manager);
00118   return me;
00119 }
00120 
00121 void Parent::
00122 fillin(Parent* me, DatagramIterator& scan, BamReader* manager)
00123 {
00124   Person::fillin(me, scan, manager);
00125   manager->read_pointer(scan);
00126   manager->read_pointer(scan);
00127 }
00128 
00129 int Parent::
00130 complete_pointers(TypedWritable *p_list, BamReader *manager)
00131 {
00132   int start = Person::complete_pointers(p_list, manager);
00133   _son = (p_list[start] == TypedWritable::Null) ? (Child*)NULL : DCAST(Child, p_list[2]);
00134   _daughter = (p_list[start+1] == TypedWritable::Null) ? (Child*)NULL : DCAST(Child, p_list[3]);
00135   return start+2;
00136 }
00137 
00138 void Parent::
00139 setSon(Child* son)
00140 {
00141   if (son->isMale()) _son = son;
00142 }
00143 void Parent::
00144 setDaughter(Child* daughter)
00145 {
00146   if (!daughter->isMale()) _daughter = daughter;
00147 }
00148 
00149 
00150 void Parent::
00151 print_relationships(void){
00152   Person::print_relationships();
00153   if (_son != NULL)
00154     nout << "My son is " << _son->name() << endl;
00155   if (_daughter != NULL)
00156     nout << "My daughter is " << _daughter->name() << endl;
00157 }
00158 
00159 void Child::
00160 write_datagram(BamWriter* manager, Datagram &me)
00161 {
00162   Person::write_datagram(manager, me);
00163   manager->write_pointer(me, _dad);
00164   manager->write_pointer(me, _mom);
00165 }
00166 
00167 TypedWritable* Child::
00168 make_child(const FactoryParams &params)
00169 {
00170   Child *me = new Child;
00171   DatagramIterator scan;
00172   BamReader *manager;
00173 
00174   parse_params(params, scan, manager);
00175   me->fillin(me, scan, manager);
00176   me->fillin(me, scan, manager);
00177 
00178   return me;
00179 }
00180 
00181 void Child::
00182 fillin(Child* me, DatagramIterator& scan, BamReader* manager)
00183 {
00184   Person::fillin(me, scan, manager);
00185   manager->read_pointer(scan);
00186   manager->read_pointer(scan);
00187 }
00188 
00189 int Child::
00190 complete_pointers(TypedWritable ** p_list, BamReader *manager)
00191 {
00192   int start = Person::complete_pointers(p_list, manager);
00193   _dad = (p_list[start] == TypedWritable::Null) ? (Parent*)NULL : DCAST(Parent, p_list[2]);
00194   _mom = (p_list[start+1] == TypedWritable::Null) ? (Parent*)NULL : DCAST(Parent, p_list[3]);
00195   return start+2;
00196 }
00197 
00198 
00199 void Child::
00200 setFather(Parent* dad)
00201 {
00202   if (dad->isMale()) _dad = dad;
00203 }
00204 
00205 void Child::
00206 setMother(Parent* mom)
00207 {
00208   if (!mom->isMale()) _mom = mom;
00209 }
00210 
00211 void Child::
00212 print_relationships(void){
00213   Person::print_relationships();
00214   if (_dad != NULL)
00215       nout << "My dad is " << _dad->name() << endl;
00216   if (_mom != NULL)
00217     nout << "My mom is " << _mom->name() << endl;
00218 }

Generated on Fri May 2 00:43:43 2003 for Panda by doxygen1.3