changeset 2872:6285237ed3b9

[project @ 1997-04-19 01:30:58 by jwe]
author jwe
date Sat, 19 Apr 1997 01:30:58 +0000
parents c691fdf6bebb
children c3f7ed3874af
files src/oct-obj.cc src/oct-obj.h
diffstat 2 files changed, 117 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/src/oct-obj.cc
+++ b/src/oct-obj.cc
@@ -31,8 +31,67 @@
 #include "error.h"
 #include "oct-obj.h"
 
-int
-octave_value_list::all_strings (void) const
+octave_value_list&
+octave_value_list::prepend (const octave_value& val)
+{
+  int n = length ();
+
+  resize (n + 1);
+
+  while (n > 0)
+    {
+      elem (n) = elem (n - 1);
+      n--;
+    }
+
+  elem (0) = val;
+  
+  return *this;
+}
+
+octave_value_list&
+octave_value_list::append (const octave_value& val)
+{
+  int n = length ();
+
+  resize (n + 1);
+
+  elem (n) = val;
+
+  return *this;
+}
+
+octave_value_list&
+octave_value_list::append (const octave_value_list& lst)
+{
+  int len = length ();
+  int lst_len = lst.length ();
+
+  resize (len + lst_len);
+
+  for (int i = 0; i < lst_len; i++)
+    elem (len + i) = lst (i);
+
+  return *this;
+}
+
+octave_value_list&
+octave_value_list::reverse (void)
+{
+  int n = length ();
+
+  for (int i = 0; i < n / 2; i++)
+    {
+      octave_value tmp = elem (i);
+      elem (i) = elem (n - i - 1);
+      elem (n - i - 1) = tmp;
+    }
+
+  return *this;
+}
+
+bool
+octave_value_list::all_strings_p (void) const
 {
   int n = length ();
 
@@ -48,7 +107,7 @@
 {
   string_vector argv;
 
-  if (all_strings ())
+  if (all_strings_p ())
     {
       int n = length ();
       argv.resize (n+1);
--- a/src/oct-obj.h
+++ b/src/oct-obj.h
@@ -35,124 +35,135 @@
 #include "ov.h"
 
 class
-octave_value_list : public Array<octave_value>
+octave_value_list
 {
 public:
 
   octave_value_list (void)
-    : Array<octave_value> () { }
+    : data () { }
 
   octave_value_list (int n, const octave_value& val)
-    : Array<octave_value> (n, val) { }
+    : data (n, val) { }
 
   octave_value_list (const octave_value& tc)
-    : Array<octave_value> (1, tc) { }
+    : data (1, tc) { }
 
   octave_value_list (double d)
-    : Array<octave_value> (1, octave_value (d)) { }
+    : data (1, octave_value (d)) { }
 
   octave_value_list (const Matrix& m)
-    : Array<octave_value> (1, octave_value (m)) { }
+    : data (1, octave_value (m)) { }
 
   octave_value_list (const DiagMatrix& d)
-    : Array<octave_value> (1, octave_value (d)) { }
+    : data (1, octave_value (d)) { }
 
   octave_value_list (const RowVector& v, int pcv)
-    : Array<octave_value> (1, octave_value (v, pcv)) { }
+    : data (1, octave_value (v, pcv)) { }
 
   octave_value_list (const ColumnVector& v, int pcv)
-    : Array<octave_value> (1, octave_value (v, pcv)) { }
+    : data (1, octave_value (v, pcv)) { }
 
   octave_value_list (const Complex& c)
-    : Array<octave_value> (1, octave_value (c)) { }
+    : data (1, octave_value (c)) { }
 
   octave_value_list (const ComplexMatrix& m)
-    : Array<octave_value> (1, octave_value (m)) { }
+    : data (1, octave_value (m)) { }
 
   octave_value_list (const ComplexDiagMatrix& d)
-    : Array<octave_value> (1, octave_value (d)) { }
+    : data (1, octave_value (d)) { }
 
   octave_value_list (const ComplexRowVector& v, int pcv)
-    : Array<octave_value> (1, octave_value (v, pcv)) { }
+    : data (1, octave_value (v, pcv)) { }
 
   octave_value_list (const ComplexColumnVector& v, int pcv)
-    : Array<octave_value> (1, octave_value (v, pcv)) { }
+    : data (1, octave_value (v, pcv)) { }
 
   octave_value_list (const char *s)
-    : Array<octave_value> (1, octave_value (s)) { }
+    : data (1, octave_value (s)) { }
 
   octave_value_list (const string& s)
-    : Array<octave_value> (1, octave_value (s)) { }
+    : data (1, octave_value (s)) { }
 
   octave_value_list (const string_vector& s)
-    : Array<octave_value> (1, octave_value (s)) { }
+    : data (1, octave_value (s)) { }
 
   octave_value_list (double base, double limit, double inc)
-    : Array<octave_value> (1, octave_value (base, limit, inc)) { }
+    : data (1, octave_value (base, limit, inc)) { }
 
   octave_value_list (const Range& r)
-    : Array<octave_value> (1, octave_value (r)) { }
+    : data (1, octave_value (r)) { }
 
   octave_value_list (const octave_value_list& obj)
-    : Array<octave_value> (obj) { }
+    : data (obj.data) { }
 
   octave_value_list& operator = (const octave_value_list& obj)
     {
       if (this != &obj)
-	Array<octave_value>::operator = (obj);
+	data = obj.data;
 
       return *this;
     }
 
-// Assignment will resize on range errors.
+  // Assignment will resize on range errors.
 
   octave_value& operator () (int n) { return elem (n); }
 
   octave_value operator () (int n) const { return elem (n); }
 
-  int all_strings (void) const;
+  int length (void) const { return data.length (); }
+
+  void resize (int n) { data.resize (n); }
+
+  void resize (int n, const octave_value& val) { data.resize (n, val); }
+
+  octave_value_list& prepend (const octave_value& val);
+
+  octave_value_list& append (const octave_value& val);
+
+  octave_value_list& append (const octave_value_list& lst);
+
+  octave_value_list& reverse (void);
+
+  bool all_strings_p (void) const;
 
   string_vector make_argv (const string&) const;
 
 private:
 
-// This constructor is private with no definition to keep statements
-// like
-//
-//   octave_value_list foo = 5;
-//   octave_value_list foo = 5.0;
-//
-// from doing different things.  Instead, you have to use the
-// constructor
-//
-//   octave_value_list (n, val);
-//
-// and supply a default value to create a vector-valued octave_value_list.
+  Array<octave_value> data;
+
+  // This constructor is private with no definition to keep statements
+  // like
+  //
+  //   octave_value_list foo = 5;
+  //   octave_value_list foo = 5.0;
+  //
+  // from doing different things.  Instead, you have to use the
+  // constructor
+  //
+  //   octave_value_list (n, val);
+  //
+  // and supply a default value to create a vector-valued
+  // octave_value_list.
 
   octave_value_list (int n);
 
   void maybe_resize (int n)
     {
       if (n >= length ())
-	resize (n + 1, Matrix ());
+	data.resize (n + 1, Matrix ());
     }
 
   octave_value& elem (int n)
     {
       maybe_resize (n);
-      return Array<octave_value>::elem (n);
+      return data.elem (n);
     }
 
-  octave_value& checkelem (int n);
-
-  octave_value& xelem (int n);
-
   octave_value elem (int n) const
     {
-      return Array<octave_value>::operator () (n);
+      return data.elem (n);
     }
-
-  octave_value checkelem (int n) const;
 };
 
 #endif