changeset 7573:755bf7ecc29b

eliminate one_zero stuff from idx_vector
author John W. Eaton <jwe@octave.org>
date Sat, 08 Mar 2008 10:14:37 -0500
parents 85da2ab0c6fd
children 9669b69e34ef
files liboctave/Array.cc liboctave/ChangeLog liboctave/Sparse.cc liboctave/idx-vector.cc liboctave/idx-vector.h
diffstat 5 files changed, 43 insertions(+), 137 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/Array.cc	Fri Mar 07 20:17:54 2008 -0500
+++ b/liboctave/Array.cc	Sat Mar 08 10:14:37 2008 -0500
@@ -2074,12 +2074,6 @@
 	{
 	  retval.resize_no_fill (0);
 	}
-      else if (len == 1 && n > 1
-	       && idx_arg.one_zero_only ()
-	       && idx_arg.ones_count () == n)
-	{
-	  retval.resize_and_fill (n, elem (0));
-	}
       else
 	{
 	  retval.resize_no_fill (n);
@@ -2133,9 +2127,7 @@
 
       octave_idx_type len = tmp.length ();
 
-      if (len == 0 && idx_arg.one_zero_only ())
-	retval = Array<T> (tmp, dim_vector (0, 0));
-      else if (len >= idx_orig_dims.numel ())
+      if (len >= idx_orig_dims.numel ())
 	retval = Array<T> (tmp, idx_orig_dims);
     }
   else if (nr == 1 || nc == 1)
@@ -2148,8 +2140,7 @@
 
       octave_idx_type len = tmp.length ();
 
-      if ((len != 0 && idx_arg.one_zero_only ())
-	  || idx_orig_rows == 1 || idx_orig_columns == 1)
+      if (idx_orig_rows == 1 || idx_orig_columns == 1)
 	{
 	  if (nr == 1)
 	    retval = Array<T> (tmp, dim_vector (1, len));
@@ -2161,11 +2152,8 @@
     }
   else
     {
-      if (! (idx_arg.one_zero_only ()
-	     && idx_orig_rows == nr
-	     && idx_orig_columns == nc))
-	(*current_liboctave_warning_with_id_handler)
-	  ("Octave:fortran-indexing", "single index used for matrix");
+      (*current_liboctave_warning_with_id_handler)
+	("Octave:fortran-indexing", "single index used for matrix");
 
       // This code is only for indexing matrices.  The vector
       // cases are handled above.
@@ -2177,12 +2165,6 @@
 	  octave_idx_type result_nr = idx_orig_rows;
 	  octave_idx_type result_nc = idx_orig_columns;
 
-	  if (idx_arg.one_zero_only ())
-	    {
-	      result_nr = idx_arg.ones_count ();
-	      result_nc = (result_nr > 0 ? 1 : 0);
-	    }
-
 	  retval.resize_no_fill (result_nr, result_nc);
 
 	  octave_idx_type k = 0;
@@ -2232,9 +2214,7 @@
     {
       bool vec_equiv = vector_equivalent (dv);
 
-      if (! vec_equiv
-	  && ! (ra_idx.is_colon ()
-		|| (ra_idx.one_zero_only () && idx_orig_dims == dv)))
+      if (! (vec_equiv || ra_idx.is_colon ()))
 	(*current_liboctave_warning_with_id_handler)
 	  ("Octave:fortran-indexing", "single index used for N-d array");
 
@@ -2262,14 +2242,6 @@
 	  else
 	    result_dims = idx_orig_dims;
 
-	  if (ra_idx.one_zero_only ())
-	    {
-	      result_dims.resize (2);
-	      octave_idx_type ntot = ra_idx.ones_count ();
-	      result_dims(0) = ntot;
-	      result_dims(1) = (ntot > 0 ? 1 : 0);
-	    }
-
 	  result_dims.chop_trailing_singletons ();
 
 	  retval.resize (result_dims);
@@ -3067,10 +3039,7 @@
 	}
       else
 	{
-	  if (! (idx_i.is_colon ()
-		 || (idx_i.one_zero_only ()
-		     && idx_i.orig_rows () == lhs_nr
-		     && idx_i.orig_columns () == lhs_nc)))
+	  if (! idx_i.is_colon ())
 	    (*current_liboctave_warning_with_id_handler)
 	      ("Octave:fortran-indexing", "single index used for matrix");
 
@@ -3182,9 +3151,7 @@
       idx_vector iidx = idx(0);
       int iidx_is_colon = iidx.is_colon ();
 
-      if (! (iidx_is_colon
-	     || (iidx.one_zero_only ()
-		 && iidx.orig_dimensions () == lhs.dims ())))
+      if (! iidx_is_colon)
 	(*current_liboctave_warning_with_id_handler)
 	  ("Octave:fortran-indexing", "single index used for N-d array");
 
--- a/liboctave/ChangeLog	Fri Mar 07 20:17:54 2008 -0500
+++ b/liboctave/ChangeLog	Sat Mar 08 10:14:37 2008 -0500
@@ -1,3 +1,15 @@
+2008-03-08  John W. Eaton  <jwe@octave.org>
+
+	* Sparse.cc (Sparse<T>::index, assign): Likewise.
+	* Array.cc (Array<T>::index1, Array<T>::index2, Array<T>::indexN,
+	assign2): Eliminate use of idx_vector::is_one_zero method.
+	* idx-vector.cc, idx-vector.h
+	(idx_vector::maybe_convert_one_zero_to_idx,
+	IDX_VEC_REP::maybe_convert_one_zero_to_idx): Delete unused function.
+	(IDX_VEC_REP::one_zero): Delete data member.
+	(IDX_VEC_REP::is_colon_equiv): Delete one_zero check.
+	(idx_vector::is_one_zero, IDX_VEC_REP::is_one_zero): Delete function.
+
 2008-03-07  John W. Eaton  <jwe@octave.org>
 
 	* idx-vector.cc (IDX_VEC_REP::idx_vector_rep (bool),
--- a/liboctave/Sparse.cc	Fri Mar 07 20:17:54 2008 -0500
+++ b/liboctave/Sparse.cc	Sat Mar 08 10:14:37 2008 -0500
@@ -1514,9 +1514,7 @@
       // you get!!
       octave_idx_type n = idx_arg.freeze (length (), "sparse vector", resize_ok);
       if (n == 0)
-	if (idx_arg.one_zero_only ())
-	  retval = Sparse<T> (dim_vector (0, 0));
-	else
+
 	  retval = Sparse<T> (idx_orig_dims);
       else if (nz < 1)
 	if (n >= idx_orig_dims.numel ())
@@ -1578,8 +1576,7 @@
 	else
 	  retval = Sparse<T> (dim_vector (0, 1));
       else if (nz < 1)
-	if ((n != 0 && idx_arg.one_zero_only ())
-	    || idx_orig_rows == 1 || idx_orig_columns == 1)
+	if (idx_orig_rows == 1 || idx_orig_columns == 1)
 	  retval = Sparse<T> ((nr == 1 ? 1 : n), (nr == 1 ? n : 1));
 	else
 	  retval = Sparse<T> (idx_orig_dims);
@@ -1613,8 +1610,7 @@
 		    }
 	      }
 
-	  if (idx_arg.one_zero_only () || idx_orig_rows == 1 || 
-	      idx_orig_columns == 1)
+	  if (idx_orig_rows == 1 || idx_orig_columns == 1)
 	    {
 	      if (nr == 1)
 		{
@@ -1723,11 +1719,8 @@
     }
   else
     {
-      if (! (idx_arg.one_zero_only ()
-	     && idx_orig_rows == nr
-	     && idx_orig_columns == nc))
-	(*current_liboctave_warning_with_id_handler) 
-	  ("Octave:fortran-indexing", "single index used for sparse matrix");
+      (*current_liboctave_warning_with_id_handler) 
+	("Octave:fortran-indexing", "single index used for sparse matrix");
 
       // This code is only for indexing matrices.  The vector
       // cases are handled above.
@@ -1739,14 +1732,8 @@
 	  octave_idx_type result_nr = idx_orig_rows;
 	  octave_idx_type result_nc = idx_orig_columns;
 
-	  if (idx_arg.one_zero_only ())
-	    {
-	      result_nr = idx_arg.ones_count ();
-	      result_nc = (result_nr > 0 ? 1 : 0);
-	    }
-
 	  if (nz < 1)
-	      retval = Sparse<T> (result_nr, result_nc);
+	    retval = Sparse<T> (result_nr, result_nc);
 	  else
 	    {
 	      // Count number of non-zero elements
@@ -3128,10 +3115,7 @@
 	}
       else
 	{
-	  if (! (idx_i.is_colon ()
-		 || (idx_i.one_zero_only ()
-		     && idx_i.orig_rows () == lhs_nr
-		     && idx_i.orig_columns () == lhs_nc)))
+	  if (! idx_i.is_colon ())
 	    (*current_liboctave_warning_with_id_handler)
 	      ("Octave:fortran-indexing", "single index used for matrix");
 
--- a/liboctave/idx-vector.cc	Fri Mar 07 20:17:54 2008 -0500
+++ b/liboctave/idx-vector.cc	Sat Mar 08 10:14:37 2008 -0500
@@ -45,9 +45,8 @@
     range_base (a.range_base), range_step (a.range_step),
     max_val (a.max_val), min_val (a.min_val),
     frozen_at_z_len (a.frozen_at_z_len), frozen_len (a.frozen_len),
-    colon (a.colon), range(a.range), one_zero (a.one_zero),
-    initialized (a.initialized), frozen (a.frozen),
-    colon_equiv_checked (a.colon_equiv_checked),
+    colon (a.colon), range(a.range), initialized (a.initialized),
+    frozen (a.frozen), colon_equiv_checked (a.colon_equiv_checked),
     colon_equiv (a.colon_equiv), orig_dims (a.orig_dims)
 {
   if (len > 0)
@@ -105,7 +104,7 @@
   : data (0), len (v.length ()), num_zeros (0), num_ones (0),
     range_base (0), range_step (0), max_val (0), min_val (0), count (1),
     frozen_at_z_len (0), frozen_len (0), colon (0), range(0),
-    one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0),
+    initialized (0), frozen (0), colon_equiv_checked (0),
     colon_equiv (0), orig_dims (len, 1)
 {
   if (len == 0)
@@ -140,7 +139,7 @@
   : data (0), len (nda.length ()), num_zeros (0), num_ones (0),
     range_base (0), range_step (0), max_val (0), min_val (0), count (1),
     frozen_at_z_len (0), frozen_len (0), colon (0), range(0),
-    one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0),
+    initialized (0), frozen (0), colon_equiv_checked (0),
     colon_equiv (0), orig_dims (nda.dims ())
 {
   if (len == 0)
@@ -176,7 +175,7 @@
   : data (0), len (r.nelem ()), num_zeros (0), num_ones (0),
     range_base (0), range_step (0), max_val (0), min_val (0), 
     count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
-    range(1), one_zero (0), initialized (0), frozen (0),
+    range(1), initialized (0), frozen (0),
     colon_equiv_checked (0), colon_equiv (0), orig_dims (1, len)
 {
   if (len < 0)
@@ -206,8 +205,8 @@
   : data (0), len (1), num_zeros (0), num_ones (0),
     range_base (0), range_step (0), max_val (0), min_val (0), 
     count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
-    range(1), one_zero (0), initialized (0), frozen (0),
-    colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1)
+    range(1), initialized (0), frozen (0), colon_equiv_checked (0),
+    colon_equiv (0), orig_dims (1, 1)
 {
   if (idx_is_inf_or_nan (d))
     return;
@@ -229,9 +228,8 @@
   : data (0), len (1), num_zeros (0), num_ones (0),
     range_base (tree_to_mat_idx (i)), range_step (1), 
     max_val (0), min_val (0), count (1), frozen_at_z_len (0),
-    frozen_len (0), colon (0), range(1), one_zero (0),
-    initialized (0), frozen (0), colon_equiv_checked (0),
-    colon_equiv (0), orig_dims (1, 1)
+    frozen_len (0), colon (0), range(1), initialized (0),
+    frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1)
 {
   init_state ();
 }
@@ -240,7 +238,7 @@
   : data (0), len (0), num_zeros (0), num_ones (0), range_base (0),
     range_step (0), max_val (0), min_val (0), count (1),
     frozen_at_z_len (0), frozen_len (0), colon (1), range(0),
-    one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0),
+    initialized (0), frozen (0), colon_equiv_checked (0),
     colon_equiv (0), orig_dims (0, 0)
 {
   assert (c == ':');
@@ -252,7 +250,7 @@
   : data (0), len (b ? 1 : 0), num_zeros (0), num_ones (0), range_base (0),
     range_step (0), max_val (0), min_val (0), count (1),
     frozen_at_z_len (0), frozen_len (0), colon (0), range(0),
-    one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0),
+    initialized (0), frozen (0), colon_equiv_checked (0),
     colon_equiv (0), orig_dims (len, len)
 {
   if (len == 0)
@@ -269,7 +267,7 @@
   : data (0), len (bnda.nnz ()), num_zeros (0), num_ones (0),
     range_base (0), range_step (0), max_val (0), min_val (0),
     count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
-    range(0), one_zero (0), initialized (0), frozen (0),
+    range(0), initialized (0), frozen (0),
     colon_equiv_checked (0), colon_equiv (0), orig_dims ()
 {
   if (len == 0)
@@ -324,7 +322,6 @@
       frozen_len = a.frozen_len;
       colon = a.colon;
       range = a.range;
-      one_zero = a.one_zero;
       initialized = a.initialized;
       frozen = a.frozen;
       colon_equiv_checked = a.colon_equiv_checked;
@@ -391,49 +388,6 @@
   initialized = 1;
 }
 
-void
-IDX_VEC_REP::maybe_convert_one_zero_to_idx (octave_idx_type z_len)
-{
-  if (one_zero && (z_len == len || z_len == 0))
-    {
-      if (num_ones == 0)
-	{
-	  len = 0;
-	  max_val = 0;
-	  min_val = 0;
-	  delete [] data;
-	  data = 0;
-	}
-      else
-	{
-	  assert (num_ones + num_zeros == len);
-
-	  octave_idx_type *new_data = new octave_idx_type [num_ones];
-	  octave_idx_type k = 0;
-	  for (octave_idx_type i = 0; i < len; i++)
-	    if (data[i] == 0)
-	      new_data[k++] = i;
-
-	  delete [] data;
-	  len = num_ones;
-	  data = new_data;
-
-	  min_val = max_val = data[0];
-
-	  octave_idx_type i = 0;
-	  do
-	    {
-	      if (data[i] > max_val)
-		max_val = data[i];
-
-	      if (data[i] < min_val)
-		min_val = data[i];
-	    }
-	  while (++i < len);
-	}
-    }
-}
-
 octave_idx_type
 IDX_VEC_REP::checkelem (octave_idx_type n) const
 {
@@ -505,11 +459,7 @@
 	}
       else if (static_cast<octave_idx_type> (len) > 1)
 	{
-	  if (one_zero)
-	    {
-	      colon_equiv = (len == n && ones_count () == n);
-	    }
-	  else if (sort_uniq)
+	  if (sort_uniq)
 	    {
 	      octave_idx_type *tmp_data = copy_data (data, len);
 
--- a/liboctave/idx-vector.h	Fri Mar 07 20:17:54 2008 -0500
+++ b/liboctave/idx-vector.h	Sat Mar 08 10:14:37 2008 -0500
@@ -51,7 +51,7 @@
       : data (0), len (0), num_zeros (0), num_ones (0),
         range_base (0), range_step (0), max_val (0),
 	min_val (0), count (1), frozen_at_z_len (0), frozen_len (0),
-	colon (0), range(0), one_zero (0), initialized (0), frozen (0),
+	colon (0), range(0), initialized (0), frozen (0),
 	colon_equiv_checked (0), colon_equiv (0), orig_dims () { }
 
     idx_vector_rep (const ColumnVector& v);
@@ -63,7 +63,7 @@
       : data (0), len (inda.length ()), num_zeros (0), num_ones (0),
 	range_base (0), range_step (0), max_val (0), min_val (0),
         count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
-        range(0), one_zero (0), initialized (0), frozen (0),
+        range(0), initialized (0), frozen (0),
         colon_equiv_checked (0), colon_equiv (0), orig_dims (inda.dims ())
     {
       if (len == 0)
@@ -97,7 +97,7 @@
       : data (0), len (1), num_zeros (0), num_ones (0),
 	range_base (0), range_step (0), max_val (0), min_val (0),
         count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
-        range(0), one_zero (0), initialized (0), frozen (0),
+        range(0), initialized (0), frozen (0),
         colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1)
     {
       data = new octave_idx_type [len];
@@ -131,7 +131,6 @@
     octave_idx_type max (void) const { return max_val; }
     octave_idx_type min (void) const { return min_val; }
 
-    int one_zero_only (void) const { return one_zero; }
     octave_idx_type zeros_count (void) const { return num_zeros; }
     octave_idx_type ones_count (void) const { return num_ones; }
 
@@ -171,7 +170,6 @@
 
     unsigned int colon : 1;
     unsigned int range : 1;
-    unsigned int one_zero : 1;
     unsigned int initialized : 1;
     unsigned int frozen : 1;
     unsigned int colon_equiv_checked : 1;
@@ -181,8 +179,6 @@
  
     void init_state (void);
 
-    void maybe_convert_one_zero_to_idx (octave_idx_type z_len);
-
     octave_idx_type tree_to_mat_idx (double x, bool& conversion_error);
 
     octave_idx_type tree_to_mat_idx (octave_idx_type i) { return i - 1; }
@@ -250,7 +246,7 @@
   octave_idx_type max (void) const { return rep->max (); }
   octave_idx_type min (void) const { return rep->min (); }
 
-  int one_zero_only (void) const { return rep->one_zero_only (); }
+  int one_zero_only (void) const { return 0; }
   octave_idx_type zeros_count (void) const { return rep->zeros_count (); }
   octave_idx_type ones_count (void) const { return rep->ones_count (); }
 
@@ -281,9 +277,6 @@
   friend std::ostream& operator << (std::ostream& os, const idx_vector& a)
     { return a.print (os); }
 
-  void maybe_convert_one_zero_to_idx (octave_idx_type z_len)
-    { rep->maybe_convert_one_zero_to_idx (z_len); }
-
 private:
 
   idx_vector_rep *rep;