aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2009-10-11 09:05:00 +0100
committerAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2009-10-11 17:16:34 +0100
commit4782eea70f1dcfabb3187f465f3f2a2ea290591a (patch)
tree501802c4e8691f6cab3252dd6288593c8b6ed5a7
parent5c3b0a2054fa6b030e1c531476727ab649b1e500 (diff)
downloadpaludis-4782eea70f1dcfabb3187f465f3f2a2ea290591a.tar.gz
paludis-4782eea70f1dcfabb3187f465f3f2a2ea290591a.tar.xz
helper for a function returning a literal
-rw-r--r--paludis/util/files.m41
-rw-r--r--paludis/util/return_literal_function-fwd.hh36
-rw-r--r--paludis/util/return_literal_function.cc21
-rw-r--r--paludis/util/return_literal_function.hh50
-rwxr-xr-xpaludis/util/return_literal_function_TEST130
-rw-r--r--paludis/util/return_literal_function_TEST.cc40
6 files changed, 278 insertions, 0 deletions
diff --git a/paludis/util/files.m4 b/paludis/util/files.m4
index 2207cdb..3e1615d 100644
--- a/paludis/util/files.m4
+++ b/paludis/util/files.m4
@@ -56,6 +56,7 @@ add(`private_implementation_pattern', `hh', `impl')
add(`pty', `hh', `cc', `test')
add(`random', `hh', `cc', `test')
add(`remove_shared_ptr', `hh')
+add(`return_literal_function', `hh', `cc', `fwd', `test')
add(`rmd160', `hh', `cc', `test')
add(`safe_ifstream', `hh', `cc', `fwd', `test', `testscript')
add(`safe_ofstream', `hh', `cc', `test', `testscript')
diff --git a/paludis/util/return_literal_function-fwd.hh b/paludis/util/return_literal_function-fwd.hh
new file mode 100644
index 0000000..7160114
--- /dev/null
+++ b/paludis/util/return_literal_function-fwd.hh
@@ -0,0 +1,36 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis 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
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef PALUDIS_GUARD_PALUDIS_UTIL_RETURN_LITERAL_FUNCTION_FWD_HH
+#define PALUDIS_GUARD_PALUDIS_UTIL_RETURN_LITERAL_FUNCTION_FWD_HH 1
+
+#include <paludis/util/attributes.hh>
+#include <tr1/functional>
+
+namespace paludis
+{
+ template <typename T_>
+ struct ReturnLiteralFunction;
+
+ template <typename T_>
+ std::tr1::function<T_ ()> return_literal_function(const T_ &)
+ PALUDIS_VISIBLE PALUDIS_ATTRIBUTE((warn_unused_result));
+}
+
+#endif
diff --git a/paludis/util/return_literal_function.cc b/paludis/util/return_literal_function.cc
new file mode 100644
index 0000000..86ba1dc
--- /dev/null
+++ b/paludis/util/return_literal_function.cc
@@ -0,0 +1,21 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis 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
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <paludis/util/return_literal_function.hh>
+
diff --git a/paludis/util/return_literal_function.hh b/paludis/util/return_literal_function.hh
new file mode 100644
index 0000000..2d5d22e
--- /dev/null
+++ b/paludis/util/return_literal_function.hh
@@ -0,0 +1,50 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis 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
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef PALUDIS_GUARD_PALUDIS_UTIL_RETURN_LITERAL_FUNCTION_HH
+#define PALUDIS_GUARD_PALUDIS_UTIL_RETURN_LITERAL_FUNCTION_HH 1
+
+#include <paludis/util/return_literal_function-fwd.hh>
+
+namespace paludis
+{
+ template <typename T_>
+ struct ReturnLiteralFunction
+ {
+ const T_ value;
+
+ const T_ operator() () const PALUDIS_ATTRIBUTE((warn_unused_result))
+ {
+ return value;
+ }
+
+ ReturnLiteralFunction(const T_ & v) :
+ value(v)
+ {
+ }
+ };
+
+ template <typename T_>
+ std::tr1::function<T_ ()> return_literal_function(const T_ & v)
+ {
+ return ReturnLiteralFunction<T_>(v);
+ }
+}
+
+#endif
diff --git a/paludis/util/return_literal_function_TEST b/paludis/util/return_literal_function_TEST
new file mode 100755
index 0000000..8198ba4
--- /dev/null
+++ b/paludis/util/return_literal_function_TEST
@@ -0,0 +1,130 @@
+#! /bin/sh
+
+# return_literal_function_TEST - temporary wrapper script for .libs/return_literal_function_TEST
+# Generated by ltmain.sh (GNU libtool) 2.2.6
+#
+# The return_literal_function_TEST program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='/bin/sed -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=""
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='2.2.6'
+ notinst_deplibs=' libpaludisutil_0.41_g30ccfea.la'
+else
+ # When we are sourced in execute mode, $file and $ECHO are already set.
+ if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ ECHO="echo"
+ file="$0"
+ # Make sure echo works.
+ if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+ # Yippee, $ECHO works!
+ :
+ else
+ # Restart under the correct shell, and then maybe $ECHO will work.
+ exec /bin/sh "$0" --no-reexec ${1+"$@"}
+ fi
+ fi
+
+ # Find the directory that this script lives in.
+ thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "x$thisdir" = "x$file" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'`
+ while test -n "$file"; do
+ destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'`
+
+ # If there was a directory component, then change thisdir.
+ if test "x$destdir" != "x$file"; then
+ case "$destdir" in
+ [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+ *) thisdir="$thisdir/$destdir" ;;
+ esac
+ fi
+
+ file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'`
+ file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'`
+ done
+
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+ if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+ # special case for '.'
+ if test "$thisdir" = "."; then
+ thisdir=`pwd`
+ fi
+ # remove .libs from thisdir
+ case "$thisdir" in
+ *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;;
+ .libs ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=`cd "$thisdir" && pwd`
+ test -n "$absdir" && thisdir="$absdir"
+
+ program='return_literal_function_TEST'
+ progdir="$thisdir/.libs"
+
+
+ if test -f "$progdir/$program"; then
+ # Add our own library path to LD_LIBRARY_PATH
+ LD_LIBRARY_PATH="/home/users/ciaranm/work/paludis/paludis/util/.libs:/usr/lib:$LD_LIBRARY_PATH"
+
+ # Some systems cannot cope with colon-terminated LD_LIBRARY_PATH
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ LD_LIBRARY_PATH=`$ECHO "X$LD_LIBRARY_PATH" | $Xsed -e 's/::*$//'`
+
+ export LD_LIBRARY_PATH
+
+ if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ # Run the actual program with our arguments.
+
+ exec "$progdir/$program" ${1+"$@"}
+
+ $ECHO "$0: cannot exec $program $*" 1>&2
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
+ $ECHO "This script is just a wrapper for $program." 1>&2
+ echo "See the libtool documentation for more information." 1>&2
+ exit 1
+ fi
+fi
diff --git a/paludis/util/return_literal_function_TEST.cc b/paludis/util/return_literal_function_TEST.cc
new file mode 100644
index 0000000..7de4b33
--- /dev/null
+++ b/paludis/util/return_literal_function_TEST.cc
@@ -0,0 +1,40 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis 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
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <paludis/util/return_literal_function.hh>
+#include <test/test_framework.hh>
+#include <test/test_runner.hh>
+
+using namespace paludis;
+using namespace test;
+
+namespace test_cases
+{
+ struct ReturnLiteralFunctionTest : TestCase
+ {
+ ReturnLiteralFunctionTest() : TestCase("return literal") { }
+
+ void run()
+ {
+ const std::tr1::function<int ()> f = return_literal_function(3);
+ TEST_CHECK_EQUAL(f(), 3);
+ }
+ } test_return_literal_function;
+}
+