diff src/DLD-FUNCTIONS/sort.cc @ 5275:23b37da9fd5b

[project @ 2005-04-08 16:07:35 by jwe]
author jwe
date Fri, 08 Apr 2005 16:07:37 +0000
parents 57077d0ddc8e
children 4c8a2e4e0717
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/sort.cc	Thu Apr 07 21:51:37 2005 +0000
+++ b/src/DLD-FUNCTIONS/sort.cc	Fri Apr 08 16:07:37 2005 +0000
@@ -48,7 +48,7 @@
 {
 public:
   T vec;
-  int indx;
+  octave_idx_type indx;
 };
 
 template <class T>
@@ -89,10 +89,10 @@
     return retval;
 
   dim_vector dv = m.dims ();
-  unsigned int ns = dv(dim);
-  unsigned int iter = dv.numel () / ns;
-  unsigned int stride = 1;
-  for (unsigned int i = 0; i < static_cast<unsigned int> (dim); i++)
+  octave_idx_type ns = dv(dim);
+  octave_idx_type iter = dv.numel () / ns;
+  octave_idx_type stride = 1;
+  for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
   T *v = m.fortran_vec ();
@@ -105,7 +105,7 @@
 
   if (stride == 1)
     {
-      for (unsigned int j = 0; j < iter; j++)
+      for (octave_idx_type j = 0; j < iter; j++)
 	{
 	  sort.sort (v, ns);
 	  v += ns;
@@ -114,10 +114,10 @@
   else
     {
       OCTAVE_LOCAL_BUFFER (T, vi, ns);
-      for (unsigned int j = 0; j < iter; j++) 
+      for (octave_idx_type j = 0; j < iter; j++) 
 	{
-	  unsigned int offset = j;
-	  unsigned int offset2 = 0;
+	   octave_idx_type offset = j;
+	   octave_idx_type offset2 = 0;
 	  while (offset >= stride)
 	    {
 	      offset -= stride;
@@ -125,12 +125,12 @@
 	    }
 	  offset += offset2 * stride * ns;
 	  
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    vi[i] = v[i*stride + offset];
 
 	  sort.sort (vi, ns);
 	      
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    v[i*stride + offset] = vi[i];
 	}
     }
@@ -150,10 +150,10 @@
     return retval;
 
   dim_vector dv = m.dims ();
-  unsigned int ns = dv(dim);
-  unsigned int iter = dv.numel () / ns;
-  unsigned int stride = 1;
-  for (unsigned int i = 0; i < static_cast<unsigned int> (dim); i++)
+  octave_idx_type ns = dv(dim);
+  octave_idx_type iter = dv.numel () / ns;
+  octave_idx_type stride = 1;
+  for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
   T *v = m.fortran_vec ();
@@ -167,18 +167,18 @@
   OCTAVE_LOCAL_BUFFER (vec_index<T> *, vi, ns);
   OCTAVE_LOCAL_BUFFER (vec_index<T>, vix, ns);
 
-  for (unsigned int i = 0; i < ns; i++)
+  for (octave_idx_type i = 0; i < ns; i++)
     vi[i] = &vix[i];
 
   NDArray idx (dv);
       
   if (stride == 1)
     {
-      for (unsigned int j = 0; j < iter; j++)
+      for (octave_idx_type j = 0; j < iter; j++)
 	{
-	  unsigned int offset = j * ns;
+	   octave_idx_type offset = j * ns;
 
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    {
 	      vi[i]->vec = v[i];
 	      vi[i]->indx = i + 1;
@@ -186,7 +186,7 @@
 
 	  indexed_sort.sort (vi, ns);
 
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    {
 	      v[i] = vi[i]->vec;
 	      idx(i + offset) = vi[i]->indx;
@@ -196,10 +196,10 @@
     }
   else
     {
-      for (unsigned int j = 0; j < iter; j++)
+      for (octave_idx_type j = 0; j < iter; j++)
 	{
-	  unsigned int offset = j;
-	  unsigned int offset2 = 0;
+	  octave_idx_type offset = j;
+	  octave_idx_type offset2 = 0;
 	  while (offset >= stride)
 	    {
 	      offset -= stride;
@@ -207,7 +207,7 @@
 	    }
 	  offset += offset2 * stride * ns;
 	      
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    {
 	      vi[i]->vec = v[i*stride + offset];
 	      vi[i]->indx = i + 1;
@@ -215,7 +215,7 @@
 
 	  indexed_sort.sort (vi, ns);
 	      
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    {
 	      v[i*stride+offset] = vi[i]->vec;
 	      idx(i*stride+offset) = vi[i]->indx;
@@ -289,7 +289,7 @@
 template class octave_sort<vec_index<unsigned EIGHT_BYTE_INT> *>;
 
 template <>
-static octave_value
+octave_value
 mx_sort (ArrayN<double> &m, int dim, sortmode mode)
 {
   octave_value retval;
@@ -298,10 +298,10 @@
     return retval;
 
   dim_vector dv = m.dims ();
-  unsigned int ns = dv(dim);
-  unsigned int iter = dv.numel () / ns;
-  unsigned int stride = 1;
-  for (unsigned int i = 0; i < static_cast<unsigned int> (dim); i++)
+  octave_idx_type ns = dv(dim);
+  octave_idx_type iter = dv.numel () / ns;
+  octave_idx_type stride = 1;
+  for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
   double *v = m.fortran_vec ();
@@ -317,12 +317,12 @@
 
   if (stride == 1)
     {
-      for (unsigned int j = 0; j < iter; j++)
+      for (octave_idx_type j = 0; j < iter; j++)
 	{
 	  // Flip the data in the vector so that int compares on
 	  // IEEE754 give the correct ordering.
 
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    p[i] = FloatFlip (p[i]);
 	      
 	  sort.sort (p, ns);
@@ -330,7 +330,7 @@
 	  // Flip the data out of the vector so that int compares
 	  // on IEEE754 give the correct ordering.
 
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    p[i] = IFloatFlip (p[i]);
 
 	  // There are two representations of NaN.  One will be
@@ -341,22 +341,22 @@
 	  if (lo_ieee_signbit (octave_NaN))
 	    if (mode == UNDEFINED || mode == ASCENDING)
 	      {
-		unsigned int i = 0;
+		octave_idx_type i = 0;
 		double *vtmp = (double *)p;
 		while (xisnan (vtmp[i++]) && i < ns);
-		for (unsigned int l = 0; l < ns - i + 1; l++)
+		for (octave_idx_type l = 0; l < ns - i + 1; l++)
 		  vtmp[l] = vtmp[l+i-1];
-		for (unsigned int l = ns - i + 1; l < ns; l++)
+		for (octave_idx_type l = ns - i + 1; l < ns; l++)
 		  vtmp[l] = octave_NaN;
 	      }
 	    else
 	      {
-		unsigned int i = ns;
+		octave_idx_type i = ns;
 		double *vtmp = (double *)p;
 		while (xisnan (vtmp[--i]) && i > 0);
-		for (int l = i; l >= 0; l--)
+		for (octave_idx_type l = i; l >= 0; l--)
 		  vtmp[l-i+ns-1] = vtmp[l];
-		for (unsigned int l = 0; l < ns - i - 1; l++)
+		for (octave_idx_type l = 0; l < ns - i - 1; l++)
 		  vtmp[l] = octave_NaN;
 	      }
 
@@ -367,10 +367,10 @@
     {
       OCTAVE_LOCAL_BUFFER (unsigned EIGHT_BYTE_INT, vi, ns);
 
-      for (unsigned int j = 0; j < iter; j++)
+      for (octave_idx_type j = 0; j < iter; j++)
 	{
-	  unsigned int offset = j;
-	  unsigned int offset2 = 0;
+	  octave_idx_type offset = j;
+	  octave_idx_type offset2 = 0;
 	  while (offset >= stride)
 	    {
 	      offset -= stride;
@@ -381,7 +381,7 @@
 	  // Flip the data in the vector so that int compares on
 	  // IEEE754 give the correct ordering.
 
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    vi[i] = FloatFlip (p[i*stride + offset]);
 
 	  sort.sort (vi, ns);
@@ -389,7 +389,7 @@
 	  // Flip the data out of the vector so that int compares
 	  // on IEEE754 give the correct ordering.
 
-	  for (unsigned int i = 0; i < ns; i++)
+	  for (octave_idx_type i = 0; i < ns; i++)
 	    p[i*stride + offset] = IFloatFlip (vi[i]);
 	      
 	  // There are two representations of NaN. One will be
@@ -400,20 +400,20 @@
 	  if (lo_ieee_signbit (octave_NaN))
 	    if (mode == UNDEFINED || mode == ASCENDING)
 	      {
-		unsigned int i = 0;
+		 octave_idx_type i = 0;
 		while (xisnan (v[i++*stride + offset]) && i < ns);
-		for (unsigned int l = 0; l < ns - i + 1; l++)
+		for (octave_idx_type l = 0; l < ns - i + 1; l++)
 		  v[l*stride + offset] = v[(l+i-1)*stride + offset];
-		for (unsigned int l = ns - i + 1; l < ns; l++)
+		for (octave_idx_type l = ns - i + 1; l < ns; l++)
 		  v[l*stride + offset] = octave_NaN;
 	      }
 	    else
 	      {
-		unsigned int i = ns;
+		 octave_idx_type i = ns;
 		while (xisnan (v[--i*stride + offset]) && i > 0);
-		for (int l = i; l >= 0; l--)
+		for (octave_idx_type l = i; l >= 0; l--)
 		  v[(l-i+ns-1)*stride + offset] = v[l*stride + offset];
-		for (unsigned int l = 0; l < ns - i - 1; l++)
+		for (octave_idx_type l = 0; l < ns - i - 1; l++)
 		  v[l*stride + offset] = octave_NaN;
 	      }
 	}
@@ -424,8 +424,9 @@
   return retval;
 }
 
+// Should other overloaded functions have their static keywords removed?
 template <>
-static octave_value_list
+octave_value_list
 mx_sort_indexed (ArrayN<double> &m, int dim, sortmode mode)
 {
   octave_value_list retval;
@@ -434,10 +435,10 @@
     return retval;
 
   dim_vector dv = m.dims ();
-  unsigned int ns = dv(dim);
-  unsigned int iter = dv.numel () / ns;
-  unsigned int stride = 1;
-  for (unsigned int i = 0; i < static_cast<unsigned int> (dim); i++)
+  octave_idx_type ns = dv(dim);
+  octave_idx_type iter = dv.numel () / ns;
+  octave_idx_type stride = 1;
+  for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
   double *v = m.fortran_vec ();
@@ -454,15 +455,15 @@
   OCTAVE_LOCAL_BUFFER (vec_index<unsigned EIGHT_BYTE_INT> *, vi, ns);
   OCTAVE_LOCAL_BUFFER (vec_index<unsigned EIGHT_BYTE_INT>, vix, ns);
   
-  for (unsigned int i = 0; i < ns; i++)
+  for (octave_idx_type i = 0; i < ns; i++)
     vi[i] = &vix[i];
 
   NDArray idx (dv);
       
-  for (unsigned int j = 0; j < iter; j++)
+  for (octave_idx_type j = 0; j < iter; j++)
     {
-      unsigned int offset = j;
-      unsigned int offset2 = 0;
+      octave_idx_type offset = j;
+      octave_idx_type offset2 = 0;
       while (offset >= stride)
 	{
 	  offset -= stride;
@@ -473,7 +474,7 @@
       // Flip the data in the vector so that int compares on
       // IEEE754 give the correct ordering.
 
-      for (unsigned int i = 0; i < ns; i++)
+      for (octave_idx_type i = 0; i < ns; i++)
 	{
 	  vi[i]->vec = FloatFlip (p[i*stride + offset]);
 	  vi[i]->indx = i + 1;
@@ -484,7 +485,7 @@
       // Flip the data out of the vector so that int compares on
       // IEEE754 give the correct ordering
 
-      for (unsigned int i = 0; i < ns; i++)
+      for (octave_idx_type i = 0; i < ns; i++)
 	{
 	  p[i*stride + offset] = IFloatFlip (vi[i]->vec);
 	  idx(i*stride + offset) = vi[i]->indx;
@@ -497,17 +498,17 @@
       if (lo_ieee_signbit (octave_NaN))
 	if (mode == UNDEFINED || mode == ASCENDING)
 	  {
-	    unsigned int i = 0;
+	    octave_idx_type i = 0;
 	    while (xisnan (v[i++*stride+offset]) && i < ns);
 	    OCTAVE_LOCAL_BUFFER (double, itmp, i - 1);
-	    for (unsigned int l = 0; l < i -1; l++)
+	    for (octave_idx_type l = 0; l < i -1; l++)
 	      itmp[l] = idx(l*stride + offset);
-	    for (unsigned int l = 0; l < ns - i + 1; l++)
+	    for (octave_idx_type l = 0; l < ns - i + 1; l++)
 	      {
 		v[l*stride + offset] = v[(l+i-1)*stride + offset];
 		idx(l*stride + offset) = idx((l+i-1)*stride + offset);
 	      }
-	    for (unsigned int k = 0, l = ns - i + 1; l < ns; l++, k++)
+	    for (octave_idx_type k = 0, l = ns - i + 1; l < ns; l++, k++)
 	      {
 		v[l*stride + offset] = octave_NaN;
 		idx(l*stride + offset) = itmp[k];
@@ -515,17 +516,17 @@
 	  }
 	else 
 	  {
-	    unsigned int i = ns;
+	     octave_idx_type i = ns;
 	    while (xisnan (v[--i*stride+offset]) && i > 0);
 	    OCTAVE_LOCAL_BUFFER (double, itmp, ns - i - 1);
-	    for (unsigned int l = 0; l < ns - i -1; l++)
+	    for (octave_idx_type l = 0; l < ns - i -1; l++)
 	      itmp[l] = idx((l+i+1)*stride + offset);
-	    for (int l = i; l >= 0; l--)
+	    for (octave_idx_type l = i; l >= 0; l--)
 	      {
 		v[(l-i+ns-1)*stride + offset] = v[l*stride + offset];
 		idx((l-i+ns-1)*stride + offset) = idx(l*stride + offset);
 	      }
-	    for (unsigned int k = 0, l = 0; l < ns - i - 1; l++, k++)
+	    for (octave_idx_type k = 0, l = 0; l < ns - i - 1; l++, k++)
 	      {
 		v[l*stride + offset] = octave_NaN;
 		idx(l*stride + offset) = itmp[k];
@@ -775,7 +776,7 @@
 	}
     }
 
-  dim_vector dv = ((const octave_complex_matrix&) arg) .dims ();
+  dim_vector dv = arg.dims ();
   if (error_state)
     {
       gripe_wrong_type_arg ("sort", arg);
@@ -856,7 +857,7 @@
       Cell cellm = arg.cell_value ();
 
       // Need to check that all elements are strings
-      for (int i = 0; i < cellm.numel (); i++)
+      for (octave_idx_type i = 0; i < cellm.numel (); i++)
 	if (! cellm(i).is_string ())
 	  {
 	    gripe_wrong_type_arg ("sort", arg);