Browse Source

output, write, and parent_id

Dave Schuyler 21 years ago
parent
commit
fe7f655b33
2 changed files with 62 additions and 9 deletions
  1. 58 8
      direct/src/dcparser/dcClass.cxx
  2. 4 1
      direct/src/dcparser/dcClass.h

+ 58 - 8
direct/src/dcparser/dcClass.cxx

@@ -187,6 +187,13 @@ get_num_fields() const {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 DCField *DCClass::
 DCField *DCClass::
 get_field(int n) const {
 get_field(int n) const {
+  #ifndef NDEBUG //[
+  if (n < 0 || n >= (int)_fields.size()) {
+    write(cerr, 0);
+    cerr<<"n:"<<n<<" _fields.size():"<<(int)_fields.size()<<endl;
+    // __asm { int 3 }
+  }
+  #endif //]
   nassertr_always(n >= 0 && n < (int)_fields.size(), NULL);
   nassertr_always(n >= 0 && n < (int)_fields.size(), NULL);
   return _fields[n];
   return _fields[n];
 }
 }
@@ -260,6 +267,44 @@ get_inherited_field(int n) const {
   return get_field(n);
   return get_field(n);
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function : output
+//       Access : Published
+//  Description : Write a string representation of this instance to
+//                <out>.
+////////////////////////////////////////////////////////////////////
+void DCClass::
+output(ostream &out) const {
+  #ifndef NDEBUG //[
+  out<<""<<"DCClass";
+  #endif //] NDEBUG
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function : write
+//       Access : Published
+//  Description : Write a string representation of this instance to
+//                <out>.
+////////////////////////////////////////////////////////////////////
+void DCClass::
+write(ostream &out, unsigned int indent) const {
+  #ifndef NDEBUG //[
+  out.width(indent); out<<""<<"DCClass:\n";
+  
+  out.width(indent+2); out<<""<<"_name "<<_name<<"\n";
+  out.width(indent+2); out<<""<<"_is_struct "<<_is_struct<<"\n";
+  out.width(indent+2); out<<""<<"_bogus_class "<<_bogus_class<<"\n";
+  out.width(indent+2); out<<""<<"_number "<<_number<<"\n";
+
+  //typedef pvector<DCClass *> Parents;
+  //Parents _parents;
+  //typedef pvector<DCField *> Fields;
+  //Fields _fields;
+  //typedef pmap<string, DCField *> FieldsByName;
+  //FieldsByName _fields_by_name;
+  #endif //] NDEBUG
+}
+
 #ifdef HAVE_PYTHON
 #ifdef HAVE_PYTHON
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: DCClass::has_class_def
 //     Function: DCClass::has_class_def
@@ -353,7 +398,7 @@ receive_update_broadcast_required(PyObject *distobj, DatagramIterator &di) const
   packer.set_unpack_data(di.get_remaining_bytes());
   packer.set_unpack_data(di.get_remaining_bytes());
 
 
   int num_fields = get_num_inherited_fields();
   int num_fields = get_num_inherited_fields();
-  for (int i = 0; i < num_fields && !PyErr_Occurred(); i++) {
+  for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) {
     DCField *field = get_inherited_field(i);
     DCField *field = get_inherited_field(i);
     DCAtomicField *atom = field->as_atomic_field();
     DCAtomicField *atom = field->as_atomic_field();
     if (atom != (DCAtomicField *)NULL &&
     if (atom != (DCAtomicField *)NULL &&
@@ -388,7 +433,7 @@ receive_update_all_required(PyObject *distobj, DatagramIterator &di) const {
   packer.set_unpack_data(di.get_remaining_bytes());
   packer.set_unpack_data(di.get_remaining_bytes());
 
 
   int num_fields = get_num_inherited_fields();
   int num_fields = get_num_inherited_fields();
-  for (int i = 0; i < num_fields && !PyErr_Occurred(); i++) {
+  for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) {
     DCField *field = get_inherited_field(i);
     DCField *field = get_inherited_field(i);
     DCAtomicField *atom = field->as_atomic_field();
     DCAtomicField *atom = field->as_atomic_field();
     if (atom != (DCAtomicField *)NULL && atom->is_required()) {
     if (atom != (DCAtomicField *)NULL && atom->is_required()) {
@@ -417,7 +462,7 @@ receive_update_other(PyObject *distobj, DatagramIterator &di) const {
   PStatTimer timer(((DCClass *)this)->_class_update_pcollector);
   PStatTimer timer(((DCClass *)this)->_class_update_pcollector);
 #endif
 #endif
   int num_fields = di.get_uint16();
   int num_fields = di.get_uint16();
-  for (int i = 0; i < num_fields && !PyErr_Occurred(); i++) {
+  for (int i = 0; i < num_fields && !PyErr_Occurred(); ++i) {
     receive_update(distobj, di);
     receive_update(distobj, di);
   }
   }
 }
 }
@@ -704,12 +749,11 @@ ai_format_update(const string &field_name, int do_id,
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 Datagram DCClass::
 Datagram DCClass::
 ai_format_generate(PyObject *distobj, int do_id, 
 ai_format_generate(PyObject *distobj, int do_id, 
-                   int zone_id, CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
+                   int parent_id, int zone_id,
+                   CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
                    PyObject *optional_fields) const {
                    PyObject *optional_fields) const {
-
   DCPacker packer;
   DCPacker packer;
 
 
-
   packer.RAW_PACK_CHANNEL(district_channel_id);
   packer.RAW_PACK_CHANNEL(district_channel_id);
   packer.RAW_PACK_CHANNEL(from_channel_id);
   packer.RAW_PACK_CHANNEL(from_channel_id);
   packer.raw_pack_uint8('A');
   packer.raw_pack_uint8('A');
@@ -722,13 +766,19 @@ ai_format_generate(PyObject *distobj, int do_id,
     packer.raw_pack_uint16(STATESERVER_OBJECT_GENERATE_WITH_REQUIRED);
     packer.raw_pack_uint16(STATESERVER_OBJECT_GENERATE_WITH_REQUIRED);
   }
   }
   
   
+  // Parent is a bit overloaded; this parent is not about inheritance,
+  // this one is about the visibility container parent, i.e. the zone
+  // parent:
+  if (parent_id) { // if wantOtpServer:
+    packer.raw_pack_uint32(parent_id);
+  }
   packer.raw_pack_uint32(zone_id);
   packer.raw_pack_uint32(zone_id);
   packer.raw_pack_uint16(_number);
   packer.raw_pack_uint16(_number);
   packer.raw_pack_uint32(do_id);
   packer.raw_pack_uint32(do_id);
 
 
   // Specify all of the required fields.
   // Specify all of the required fields.
   int num_fields = get_num_inherited_fields();
   int num_fields = get_num_inherited_fields();
-  for (int i = 0; i < num_fields; i++) {
+  for (int i = 0; i < num_fields; ++i) {
     DCField *field = get_inherited_field(i);
     DCField *field = get_inherited_field(i);
     if (field->is_required() && field->as_molecular_field() == NULL) {
     if (field->is_required() && field->as_molecular_field() == NULL) {
       packer.begin_pack(field);
       packer.begin_pack(field);
@@ -744,7 +794,7 @@ ai_format_generate(PyObject *distobj, int do_id,
     int num_optional_fields = PySequence_Size(optional_fields);
     int num_optional_fields = PySequence_Size(optional_fields);
     packer.raw_pack_uint16(num_optional_fields);
     packer.raw_pack_uint16(num_optional_fields);
 
 
-    for (int i = 0; i < num_optional_fields; i++) {
+    for (int i = 0; i < num_optional_fields; ++i) {
       PyObject *py_field_name = PySequence_GetItem(optional_fields, i);
       PyObject *py_field_name = PySequence_GetItem(optional_fields, i);
       string field_name = PyString_AsString(py_field_name);
       string field_name = PyString_AsString(py_field_name);
       Py_XDECREF(py_field_name);
       Py_XDECREF(py_field_name);

+ 4 - 1
direct/src/dcparser/dcClass.h

@@ -66,6 +66,9 @@ PUBLISHED:
 
 
   INLINE void start_generate();
   INLINE void start_generate();
   INLINE void stop_generate();
   INLINE void stop_generate();
+  
+  virtual void output(ostream &out) const;
+  virtual void write(ostream &out, unsigned int indent=0) const;
 
 
 #ifdef HAVE_PYTHON
 #ifdef HAVE_PYTHON
   bool has_class_def() const;
   bool has_class_def() const;
@@ -92,7 +95,7 @@ PUBLISHED:
                                 int do_id, PyObject *args) const;
                                 int do_id, PyObject *args) const;
   Datagram ai_format_update(const string &field_name, int do_id, 
   Datagram ai_format_update(const string &field_name, int do_id, 
                             CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const;
                             CHANNEL_TYPE to_id, CHANNEL_TYPE from_id, PyObject *args) const;
-  Datagram ai_format_generate(PyObject *distobj, int do_id, int zone_id,
+  Datagram ai_format_generate(PyObject *distobj, int do_id, int parent_id, int zone_id,
                               CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
                               CHANNEL_TYPE district_channel_id, CHANNEL_TYPE from_channel_id,
                               PyObject *optional_fields) const;
                               PyObject *optional_fields) const;
 #endif 
 #endif