00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "dataNodeTransmit.h"
00016 #include "bamReader.h"
00017 #include "bamWriter.h"
00018
00019 TypeHandle DataNodeTransmit::_type_handle;
00020
00021
00022
00023
00024
00025
00026 DataNodeTransmit::
00027 ~DataNodeTransmit() {
00028 }
00029
00030
00031
00032
00033
00034
00035
00036 void DataNodeTransmit::
00037 slot_data(int index) {
00038 nassertv(index < 1000);
00039 while (index >= (int)_data.size()) {
00040 _data.push_back(EventParameter());
00041 }
00042 }
00043
00044
00045
00046
00047
00048
00049
00050 void DataNodeTransmit::
00051 register_with_read_factory() {
00052 BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
00053 }
00054
00055
00056
00057
00058
00059
00060
00061 void DataNodeTransmit::
00062 write_datagram(BamWriter *manager, Datagram &dg) {
00063 TypedWritable::write_datagram(manager, dg);
00064
00065 dg.add_uint16(_data.size());
00066 Data::const_iterator di;
00067 for (di = _data.begin(); di != _data.end(); ++di) {
00068 const EventParameter ¶m = (*di);
00069 TypedWritableReferenceCount *ptr = param.get_ptr();
00070 manager->write_pointer(dg, ptr);
00071 }
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081 int DataNodeTransmit::
00082 complete_pointers(TypedWritable **p_list, BamReader *manager) {
00083 int pi = TypedWritable::complete_pointers(p_list, manager);
00084
00085 Data::iterator di;
00086 for (di = _data.begin(); di != _data.end(); ++di) {
00087 (*di) = EventParameter(DCAST(TypedWritableReferenceCount, p_list[pi++]));
00088 }
00089
00090 return pi;
00091 }
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 TypedWritable *DataNodeTransmit::
00102 make_from_bam(const FactoryParams ¶ms) {
00103 DataNodeTransmit *xmit = new DataNodeTransmit;
00104 DatagramIterator scan;
00105 BamReader *manager;
00106
00107 parse_params(params, scan, manager);
00108 xmit->fillin(scan, manager);
00109
00110 return xmit;
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120 void DataNodeTransmit::
00121 fillin(DatagramIterator &scan, BamReader *manager) {
00122 TypedWritable::fillin(scan, manager);
00123
00124 int num_params = scan.get_uint16();
00125 _data.reserve(num_params);
00126 for (int i = 0; i < num_params; i++) {
00127 manager->read_pointer(scan);
00128 _data.push_back(EventParameter());
00129 }
00130 }