diff liboctave/idx-vector.cc @ 191:b6b4d8c513fe

[project @ 1993-10-29 23:41:39 by jwe]
author jwe
date Fri, 29 Oct 1993 23:41:39 +0000
parents e2c950dd96d2
children 5869adaa6aea
line wrap: on
line diff
--- a/liboctave/idx-vector.cc
+++ b/liboctave/idx-vector.cc
@@ -36,6 +36,8 @@
 
 idx_vector::idx_vector (const idx_vector& a)
 {
+  initialized = a.initialized;
+
   len = a.len;
   if (len > 0)
     {
@@ -51,7 +53,7 @@
       min_val = a.min_val;
     }
   else
-    data = 0;
+    data = (int *) 0;
 }
 
 static inline int
@@ -66,16 +68,19 @@
 idx_vector::idx_vector (const Matrix& m, int do_ftn_idx,
 			const char *rc, int z_len = 0)
 {
+  initialized = 0;
+
   int nr = m.rows ();
   int nc = m.columns ();
 
   if (nr == 0 || nc == 0)
     {
       len = 0;
-      data = 0;
+      data = (int *) 0;
       num_zeros = 0;
       num_ones = 0;
       one_zero = 0;
+      initialized = 1;
       return;
     }
   else if (nr > 1 && nc > 1 && do_ftn_idx)
@@ -102,8 +107,8 @@
     }
   else
     {
-      message ((char *) NULL, "invalid matrix index");
-      jump_to_top_level ();
+      error ("invalid matrix used as index");
+      return;
     }
 
   init_state (rc, z_len);
@@ -111,9 +116,24 @@
 
 idx_vector::idx_vector (const Range& r)
 {
+  initialized = 0;
+
   len = r.nelem ();
 
-  assert (len != 0);
+  if (len < 0)
+    {
+      error ("invalid range used as index");
+      return;
+    }
+  else if (len == 0)
+    {
+      data = (int *) 0;
+      num_zeros = 0;
+      num_ones = 0;
+      one_zero = 0;
+      initialized = 1;
+      return;
+    }
 
   double b = r.base ();
   double step = r.inc ();
@@ -134,6 +154,8 @@
 {
   if (this != &a)
     {
+      initialized = a.initialized;
+
       delete [] data;
       len = a.len;
       data = new int [len];
@@ -184,7 +206,7 @@
 	{
 	  delete [] data;
 	  len = 0;
-	  data = 0;
+	  data = (int *) 0;
 	  num_zeros = 0;
 	  num_ones = 0;
 	  one_zero = 0;
@@ -195,8 +217,11 @@
   else if (min_val < 0)
     {
       error ("%s index %d out of range", rc, min_val+1);
-      jump_to_top_level ();
+      initialized = 0;
+      return;
     }
+
+  initialized = 1;
 }
 
 void