aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/util.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2008-09-17 10:02:55 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2008-09-17 10:02:55 +0000
commit7ab68961e4d7c30485efde1fb9dcb6edbdea9b5c (patch)
tree2bb1faf9cb583276240ac9e9fa940205202bec39 /src/libutil/util.hh
parent2b2aa8a820b10aeaf8bb8f1eb70937d04869c045 (diff)
* Garbage collector: added an option `--use-atime' to delete paths in
order of ascending last access time. This is useful in conjunction with --max-freed or --max-links to prefer deleting non-recently used garbage, which is good (especially in the build farm) since garbage may become live again. The code could easily be modified to accept other criteria for ordering garbage by changing the comparison operator used by the priority queue in collectGarbage().
Diffstat (limited to 'src/libutil/util.hh')
-rw-r--r--src/libutil/util.hh23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index 1fd89f3a5..33b06ca95 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -303,6 +303,29 @@ bool hasSuffix(const string & s, const string & suffix);
void ignoreException();
+/* STL functions such as sort() pass a binary function object around
+ by value, so it gets cloned a lot. This is bad if the function
+ object has state or is simply large. This adapter wraps the
+ function object to simulate passing by reference. */
+template<class F>
+struct binary_function_ref_adapter
+{
+ F * p;
+
+ binary_function_ref_adapter(F * _p)
+ {
+ p = _p;
+ }
+
+ typename F::result_type operator () (
+ const typename F::first_argument_type & x,
+ const typename F::second_argument_type & y)
+ {
+ return (*p)(x, y);
+ }
+};
+
+
}