Panda3D
lwoGroupChunk.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file lwoGroupChunk.cxx
10  * @author drose
11  * @date 2001-04-24
12  */
13 
14 #include "lwoGroupChunk.h"
15 #include "lwoInputFile.h"
16 
17 #include "pnotify.h"
18 
19 TypeHandle LwoGroupChunk::_type_handle;
20 
21 /**
22  * Returns the number of child chunks of this group.
23  */
25 get_num_chunks() const {
26  return _chunks.size();
27 }
28 
29 /**
30  * Returns the nth child chunk of this group.
31  */
33 get_chunk(int n) const {
34  nassertr(n >= 0 && n < (int)_chunks.size(), nullptr);
35  return _chunks[n];
36 }
37 
38 /**
39  * Reads a sequence of child chunks, until byte stop_at has been been reached,
40  * and stores them as the children. Returns true if successful (and exactly
41  * the correct number of bytes were read), or false otherwise.
42  */
43 bool LwoGroupChunk::
44 read_chunks_iff(IffInputFile *in, size_t stop_at) {
45  while (in->get_bytes_read() < stop_at && !in->is_eof()) {
46  PT(IffChunk) chunk = in->get_chunk();
47  if (chunk == nullptr) {
48  return false;
49  }
50  _chunks.push_back(chunk);
51  }
52 
53  return (in->get_bytes_read() == stop_at);
54 }
55 
56 /**
57  * Similar to read_chunks_iff(), but reads them as subchunks.
58  */
59 bool LwoGroupChunk::
60 read_subchunks_iff(IffInputFile *in, size_t stop_at) {
61  while (in->get_bytes_read() < stop_at && !in->is_eof()) {
62  PT(IffChunk) chunk = in->get_subchunk(this);
63  if (chunk == nullptr) {
64  return false;
65  }
66  _chunks.push_back(chunk);
67  }
68 
69  return (in->get_bytes_read() == stop_at);
70 }
71 
72 /**
73  * Formats the list of chunks for output to the user (primarily for
74  * debugging), one per line.
75  */
76 void LwoGroupChunk::
77 write_chunks(std::ostream &out, int indent_level) const {
78  Chunks::const_iterator ci;
79  for (ci = _chunks.begin(); ci != _chunks.end(); ++ci) {
80  (*ci)->write(out, indent_level);
81  }
82 }
size_t get_bytes_read() const
Returns the number of bytes read so far from the input file.
Definition: iffInputFile.I:44
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
IffChunk * get_chunk(int n) const
Returns the nth child chunk of this group.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
The basic kind of record in an EA "IFF" file, which the LightWave object file is based on.
Definition: iffChunk.h:30
int get_num_chunks() const
Returns the number of child chunks of this group.
A wrapper around an istream used for reading an IFF file.
Definition: iffInputFile.h:30
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
bool is_eof() const
Returns true if the last read operation failed because of reaching EOF, false otherwise.
Definition: iffInputFile.I:36