// -*- C++ -*-
+/**
+ * \file ShareContainer.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
#ifndef SHARECONTAINER_H
#define SHARECONTAINER_H
+#include <boost/utility.hpp>
+#include <boost/shared_ptr.hpp>
+
#include <vector>
#include <algorithm>
#include <functional>
-#include <boost/utility.hpp>
-#include <boost/smart_ptr.hpp>
/// Share objects between several users.
/**
value_type
get(Share const & ps) const {
// First see if we already have this ps in the container
- Params::iterator it = std::find_if(params.begin(),
- params.end(),
- isEqual(ps));
+ typename Params::iterator it = std::find_if(params.begin(),
+ params.end(),
+ isEqual(ps));
value_type tmp;
if (it == params.end()) {
// ok we don't have it so we should
}
private:
/// A functor returning true if the elements are equal.
- struct isEqual {
+ struct isEqual : public std::unary_function<value_type, bool> {
isEqual(Share const & s) : p_(s) {}
bool operator()(value_type const & p1) const {
return *p1.get() == p_;
Share const & p_;
};
/// A functor returning true if the element is unique.
- struct isUnique {
+ struct isUnique : public std::unary_function<value_type, bool> {
bool operator()(value_type const & p) const {
return p.unique();
}
};
-
+
/** Remove all unique items.
This removes all elements from params that is only referenced
from the private container. This can be considered a memory
optimizaton.
*/
void clean() const {
- Params::iterator it = std::remove_if(params.begin(),
- params.end(),
- isUnique());
+ typename Params::iterator it = std::remove_if(params.begin(),
+ params.end(),
+ isUnique());
params.erase(it, params.end());
}
-
+
/// The actual container.
mutable Params params;
};