00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "fltGroup.h"
00016 #include "fltRecordReader.h"
00017 #include "fltRecordWriter.h"
00018 #include "fltHeader.h"
00019
00020 TypeHandle FltGroup::_type_handle;
00021
00022
00023
00024
00025
00026
00027 FltGroup::
00028 FltGroup(FltHeader *header) : FltBeadID(header) {
00029 _relative_priority = 0;
00030 _flags = 0;
00031 _special_id1 = 0;
00032 _special_id2 = 0;
00033 _significance = 0;
00034 _layer_id = 0;
00035 }
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 bool FltGroup::
00046 extract_record(FltRecordReader &reader) {
00047 if (!FltBeadID::extract_record(reader)) {
00048 return false;
00049 }
00050
00051 nassertr(reader.get_opcode() == FO_group, false);
00052 DatagramIterator &iterator = reader.get_iterator();
00053
00054 _relative_priority = iterator.get_be_int16();
00055 iterator.skip_bytes(2);
00056 _flags = iterator.get_be_uint32();
00057 _special_id1 = iterator.get_be_int16();
00058 _special_id2 = iterator.get_be_int16();
00059 _significance = iterator.get_be_int16();
00060 _layer_id = iterator.get_int8();
00061 iterator.skip_bytes(1);
00062 if (_header->get_flt_version() >= 1420) {
00063 iterator.skip_bytes(4);
00064 }
00065
00066 check_remaining_size(iterator);
00067 return true;
00068 }
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 bool FltGroup::
00079 build_record(FltRecordWriter &writer) const {
00080 if (!FltBeadID::build_record(writer)) {
00081 return false;
00082 }
00083
00084 writer.set_opcode(FO_group);
00085 Datagram &datagram = writer.update_datagram();
00086
00087 datagram.add_be_int16(_relative_priority);
00088 datagram.pad_bytes(2);
00089 datagram.add_be_uint32(_flags);
00090 datagram.add_be_int16(_special_id1);
00091 datagram.add_be_int16(_special_id2);
00092 datagram.add_be_int16(_significance);
00093 datagram.add_int8(_layer_id);
00094 datagram.pad_bytes(5);
00095
00096 return true;
00097 }