changeset 7344:4571f691b0ce

[project @ 2008-01-04 18:18:22 by jwe]
author jwe
date Fri, 04 Jan 2008 18:18:22 +0000
parents e0a77d2ef9bd
children 74075b3b54c1
files liboctave/MSparse.cc liboctave/Sparse-op-defs.h scripts/ChangeLog scripts/set/create_set.m scripts/set/union.m src/ov-mapper.cc
diffstat 6 files changed, 59 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/MSparse.cc	Fri Jan 04 18:10:00 2008 +0000
+++ b/liboctave/MSparse.cc	Fri Jan 04 18:18:22 2008 +0000
@@ -1,6 +1,6 @@
 /*
 
-Copyright (C) 2004, 2005, 2006, 2007 David Bateman
+Copyright (C) 2004, 2005, 2006, 2007, 2008 David Bateman
 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Andy Adler
 
 This file is part of Octave.
--- a/liboctave/Sparse-op-defs.h	Fri Jan 04 18:10:00 2008 +0000
+++ b/liboctave/Sparse-op-defs.h	Fri Jan 04 18:18:22 2008 +0000
@@ -1,6 +1,6 @@
 /*
 
-Copyright (C) 2004, 2005, 2006, 2007 David Bateman
+Copyright (C) 2004, 2005, 2006, 2007, 2008 David Bateman
 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Andy Adler
 
 This file is part of Octave.
--- a/scripts/ChangeLog	Fri Jan 04 18:10:00 2008 +0000
+++ b/scripts/ChangeLog	Fri Jan 04 18:18:22 2008 +0000
@@ -1,3 +1,7 @@
+2008-01-04  Soren Hauberg   <hauberg@gmail.com>
+
+	* set/create_set.m, set/union.m: Accept "rows" argument.
+
 2008-01-02  John W. Eaton  <jwe@octave.org>
 
 	* plot/print.m: Correctly handle pbm terminal.
--- a/scripts/set/create_set.m	Fri Jan 04 18:10:00 2008 +0000
+++ b/scripts/set/create_set.m	Fri Jan 04 18:18:22 2008 +0000
@@ -1,4 +1,4 @@
-## Copyright (C) 1994, 1996, 1997, 1999, 2000, 2004, 2005, 2006, 2007
+## Copyright (C) 1994, 1996, 1997, 1999, 2000, 2004, 2005, 2006, 2007, 2008
 ##               John W. Eaton
 ##
 ## This file is part of Octave.
@@ -19,37 +19,44 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} create_set (@var{x})
+## @deftypefnx{Function File} {} create_set (@var{x}, "rows")
 ## Return a row vector containing the unique values in @var{x}, sorted in
 ## ascending order.  For example,
 ##
 ## @example
 ## @group
-## create_set ([ 1, 2; 3, 4; 4, 2 ])
+## create_set ([ 1, 2; 3, 4; 4, 2; 1, 2 ])
 ##      @result{} [ 1, 2, 3, 4 ]
 ## @end group
 ## @end example
-## @seealso{union, intersection, complement}
+##
+## If the optional second input argument is the string "rows" each row of
+## the matrix @var{x} will be considered an element of set.  For example,
+## @example
+## @group
+## create_set ([ 1, 2; 3, 4; 4, 2; 1, 2 ], "rows")
+##      @result{}  1   2
+##     3   4
+##     4   2
+## @end group
+## @end example
+## @seealso{union, intersection, complement, unique}
 ## @end deftypefn
 
 ## Author: jwe
 
-function y = create_set(x)
+function y = create_set (x, rows_opt)
 
-  if (nargin != 1)
+  if (nargin < 1 || nargin > 2)
     print_usage ();
   endif
-
-  if (isempty(x))
-    y = [];
+  
+  if (nargin == 1)
+    y = unique (x).';
+  elseif (strcmpi (rows_opt, "rows"))
+    y = unique (x, "rows");
   else
-    nel = numel (x);
-    y = sort (reshape (x, 1, nel));
-    els = find (y(1:nel-1) != y(2:nel));
-    if (isempty (els));
-      y = y(1);
-    else
-      y = y([1, els+1]);
-    endif
+    error ("create_set: expecting \"rows\" as second argument");
   endif
 
 endfunction
--- a/scripts/set/union.m	Fri Jan 04 18:10:00 2008 +0000
+++ b/scripts/set/union.m	Fri Jan 04 18:18:22 2008 +0000
@@ -1,5 +1,5 @@
 ## Copyright (C) 1994, 1996, 1997, 1999, 2000, 2003, 2004, 2005, 2006,
-##               2007 John W. Eaton
+##               2007, 2008 John W. Eaton
 ##
 ## This file is part of Octave.
 ##
@@ -19,13 +19,26 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} union (@var{x}, @var{y})
+## @deftypefnx{Function File} {} union (@var{x}, @var{y}, "rows")
 ## Return the set of elements that are in either of the sets @var{x} and
 ## @var{y}.  For example,
 ##
 ## @example
 ## @group
-## union ([ 1, 2, 4 ], [ 2, 3, 5 ])
-##      @result{} [ 1, 2, 3, 4, 5 ]
+## union ([1, 2, 4], [2, 3, 5])
+##      @result{} [1, 2, 3, 4, 5]
+## @end group
+## @end example
+##
+## If the optional third input argument is the string "rows" each row of
+## the matrices @var{x} and @var{y} will be considered an element of sets.
+## For example,
+## @example
+## @group
+## union([1, 2; 2, 3], [1, 2; 3, 4], "rows")
+##      @result{}  1   2
+##     2   3
+##     3   4
 ## @end group
 ## @end example
 ## @seealso{create_set, intersection, complement}
@@ -33,23 +46,31 @@
 
 ## Author: jwe
 
-function y = union(a,b)
+function y = union (a, b, varargin)
 
-  if (nargin != 2)
+  if (nargin < 2 || nargin > 3)
     print_usage ();
   endif
 
+  if (nargin == 3 && ! strcmpi (varargin{1}, "rows"))
+    error ("union: if a third input argument is present, it must be the string 'rows'");
+  endif
+
   if (isempty (a))
-    y = create_set (b);
+    y = create_set (b, varargin{:});
   elseif (isempty (b))
-    y = create_set (a);
-  else
+    y = create_set (a, varargin{:});
+  elseif (nargin == 2)
     y = create_set ([a(:); b(:)]);
     if (size (a, 1) == 1 || size (b, 1) == 1)
       y = y(:).';
     else
       y = y(:);
     endif
+  elseif (ndims (a) == 2 && ndims (b) == 2 && columns (a) == columns (b))
+    y = create_set ([a; b], "rows");
+  else
+    error ("union: input arguments must contain the same number of columns when \"rows\" is specified");
   endif
 
 endfunction
--- a/src/ov-mapper.cc	Fri Jan 04 18:10:00 2008 +0000
+++ b/src/ov-mapper.cc	Fri Jan 04 18:18:22 2008 +0000
@@ -1,7 +1,7 @@
 /*
 
 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005,
-              2006, 2007 John W. Eaton
+              2006, 2007, 2008 John W. Eaton
 
 This file is part of Octave.