diff liboctave/functor.h @ 7503:8c32f95c2639

convert mapper functions to new format
author David Bateman <dbateman@free.fr>
date Wed, 20 Feb 2008 04:22:50 -0500
parents
children 4c0cdbe0acca
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/liboctave/functor.h
@@ -0,0 +1,81 @@
+/*
+
+Copyright (C) 2008 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_functor_h)
+#define octave_functor_h 1
+
+template <typename RT, typename PT>
+class fcn_ptr
+{
+public:
+  typedef RT (*TYPE) (PT);
+};
+
+template <typename RT, typename PT>
+class functor
+{
+private:
+  typedef typename fcn_ptr<RT, PT>::TYPE fcn_ptr_type;
+  fcn_ptr_type fptr;
+
+public:
+
+  functor (fcn_ptr_type p) : fptr (p) { }
+
+  RT operator () (PT arg) { return fptr (arg); }
+};
+
+template <typename CT, typename RT, typename PT>
+class functor_with_conversion
+{
+private:
+  typedef typename fcn_ptr<RT, PT>::TYPE fcn_ptr_type;
+  fcn_ptr_type fptr;
+
+public:
+
+  functor_with_conversion (fcn_ptr_type p) : fptr (p) { }
+
+  CT operator () (PT arg) { return CT (fptr (arg)); }
+};
+
+template <typename RT, typename PT>
+functor<RT, PT>
+func_ptr (RT (*f) (PT))
+{
+  return functor<RT, PT> (f);
+}
+
+template <typename CT, typename RT, typename PT>
+functor_with_conversion<CT, RT, PT>
+func_ptr_with_conversion (RT (*f) (PT))
+{
+  return functor_with_conversion<CT, RT, PT> (f);
+}
+
+#endif
+
+/*
+;;; Local Variables: ***
+;;; mode: C++ ***
+;;; End: ***
+*/