Mercurial > octave
changeset 22063:55c20a3e3e59
ovl: new constructor with initializer_list to reduce code duplication.
* libinterp/octave-value/ovl.h (ovl): remove the 11 repeated functions
that eased the creation of an octave_value_list from 0 to 10 octave_value
objects. Replace with a single function that makes use of variadic
template. Also add new constructor that works with a initializer_list.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Thu, 07 Jul 2016 17:22:25 +0100 |
parents | d18aad835ad6 |
children | bd4f3d2ce52f |
files | libinterp/octave-value/ovl.h |
diffstat | 1 files changed, 23 insertions(+), 149 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/octave-value/ovl.h Thu Jul 07 10:28:31 2016 -0400 +++ b/libinterp/octave-value/ovl.h Thu Jul 07 17:22:25 2016 +0100 @@ -28,6 +28,7 @@ #include <string> #include <vector> +#include <initializer_list> #include "str-vec.h" #include "Array.h" @@ -56,6 +57,14 @@ octave_value_list (const Array<octave_value>& d) : data (d.as_row ()), names () { } + octave_value_list (const std::initializer_list<octave_value>& args) + : data (dim_vector (1, args.size ())), names () + { + octave_idx_type i = 0; + for (const octave_value& x : args) + data(i++) = x; + } + octave_value_list (const Cell& tc) : data (tc.as_row ()), names () { } @@ -167,158 +176,23 @@ }; -// Make it easy to build argument lists for built-in functions, -// or for returning values. - -inline octave_value_list -ovl () -{ - return octave_value_list (); -} +//! Construct an octave_value_list with less typing. +/*! + Historically, this made it easier to create an octave_value_list + from multiple octave_value arguments. It is no longer useful since + octave_value_list has now a constructor accepting an initializer_list + so all it does is save some typing. The following are equivalent: -inline octave_value_list -ovl (const octave_value& a0) -{ - octave_value_list retval (1); - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1) -{ - octave_value_list retval (2); - retval(1) = a1; - retval(0) = a0; - return retval; -} - + @code{.cc} + return octave_value_list ({ov0, ov1, ov2}); + return ovl (ov0, ov1, ov2); + @endcode +*/ +template<typename... OV_Args> inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2) -{ - octave_value_list retval (3); - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3) -{ - octave_value_list retval (4); - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3, - const octave_value& a4) -{ - octave_value_list retval (5); - retval(4) = a4; - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3, - const octave_value& a4, const octave_value& a5) +ovl (const OV_Args&... args) { - octave_value_list retval (6); - retval(5) = a5; - retval(4) = a4; - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3, - const octave_value& a4, const octave_value& a5, - const octave_value& a6) -{ - octave_value_list retval (7); - retval(6) = a6; - retval(5) = a5; - retval(4) = a4; - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3, - const octave_value& a4, const octave_value& a5, - const octave_value& a6, const octave_value& a7) -{ - octave_value_list retval (8); - retval(7) = a7; - retval(6) = a6; - retval(5) = a5; - retval(4) = a4; - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3, - const octave_value& a4, const octave_value& a5, - const octave_value& a6, const octave_value& a7, - const octave_value& a8) -{ - octave_value_list retval (9); - retval(8) = a8; - retval(7) = a7; - retval(6) = a6; - retval(5) = a5; - retval(4) = a4; - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; -} - -inline octave_value_list -ovl (const octave_value& a0, const octave_value& a1, - const octave_value& a2, const octave_value& a3, - const octave_value& a4, const octave_value& a5, - const octave_value& a6, const octave_value& a7, - const octave_value& a8, const octave_value& a9) -{ - octave_value_list retval (10); - retval(9) = a9; - retval(8) = a8; - retval(7) = a7; - retval(6) = a6; - retval(5) = a5; - retval(4) = a4; - retval(3) = a3; - retval(2) = a2; - retval(1) = a1; - retval(0) = a0; - return retval; + return octave_value_list ({args...}); } #endif