Browse Source

Ramfile::readline()

David Rose 23 years ago
parent
commit
eff0d77e07
3 changed files with 34 additions and 1 deletions
  1. 1 0
      panda/src/express/buffer.I
  2. 29 0
      panda/src/express/buffer.cxx
  3. 4 1
      panda/src/express/buffer.h

+ 1 - 0
panda/src/express/buffer.I

@@ -33,4 +33,5 @@ get_length(void) const {
 ////////////////////////////////////////////////////////////////////
 INLINE Ramfile::
 Ramfile(void) {
+  _pos = 0;
 }

+ 29 - 0
panda/src/express/buffer.cxx

@@ -41,3 +41,32 @@ Buffer::
 ~Buffer() {
   delete _buffer;
 }
+
+
+////////////////////////////////////////////////////////////////////
+//     Function: Ramfile::readline
+//       Access: Published
+//  Description: Assumes the stream represents a text file, and
+//               extracts one line up to and including the trailing
+//               newline character.  Returns empty string when the end
+//               of file is reached.
+//
+//               The interface here is intentionally designed to be
+//               similar to that for Python's File.readline()
+//               function.
+////////////////////////////////////////////////////////////////////
+string Ramfile::
+readline() {
+  size_t start = _pos;
+  while (_pos < _data.length() && _data[_pos] != '\n') {
+    ++_pos;
+  }
+
+  if (_pos < _data.length() && _data[_pos] == '\n') {
+    // Include the newline character also.
+    ++_pos;
+  }
+
+  return _data.substr(start, _pos - start);
+}
+

+ 4 - 1
panda/src/express/buffer.h

@@ -52,9 +52,12 @@ private:
 ////////////////////////////////////////////////////////////////////
 class EXPCL_PANDAEXPRESS Ramfile {
 PUBLISHED:
-  INLINE Ramfile(void);
+  INLINE Ramfile();
+
+  string readline();
 
 public:
+  size_t _pos;
   string _data;
 };