#include "support/Package.h"
#include "support/lassert.h"
-#include "support/bind.h"
#include <algorithm>
-#include <functional>
#include <iterator>
#include <memory>
Buffer * BufferList::createNewBuffer(string const & s)
{
- auto_ptr<Buffer> tmpbuf;
+ unique_ptr<Buffer> tmpbuf;
try {
- tmpbuf.reset(new Buffer(s));
+ tmpbuf = make_unique<Buffer>(s);
} catch (ExceptionMessage const & message) {
if (message.type_ == ErrorException) {
Alert::error(message.title_, message.details_);
}
+void BufferList::invalidateConverterCache() const
+{
+ BufferStorage::const_iterator it = bstore.begin();
+ BufferStorage::const_iterator const en = bstore.end();
+ for (; it != en; ++it)
+ (*it)->params().invalidateConverterCache();
+}
+
+
bool BufferList::exists(FileName const & fname) const
{
return getBuffer(fname) != 0;
}
-namespace {
-
-struct equivalent_to : public binary_function<FileName, FileName, bool>
+bool BufferList::isOthersChild(Buffer * parent, Buffer * child)
{
- bool operator()(FileName const & x, FileName const & y) const
- { return equivalent(x, y); }
-};
+ LASSERT(parent, return false);
+ LASSERT(child, return false);
+ LASSERT(parent->isChild(child), return false);
+
+ // Does child document have a different parent?
+ Buffer const * parent_ = child->parent();
+ if (parent_ && parent_ != parent)
+ return true;
+ for(Buffer * buf : bstore)
+ if (buf != parent && buf->isChild(child))
+ return true;
+ return false;
}
Buffer * BufferList::getBuffer(support::FileName const & fname, bool internal) const
{
// 1) cheap test, using string comparison of file names
- BufferStorage::const_iterator it = find_if(bstore.begin(), bstore.end(),
- lyx::bind(equal_to<FileName>(), lyx::bind(&Buffer::fileName, _1), fname));
- if (it != bstore.end())
- return *it;
+ for (Buffer * b : bstore)
+ if (b->fileName() == fname)
+ return b;
// 2) possibly expensive test, using equivalence test of file names
- it = find_if(bstore.begin(), bstore.end(),
- lyx::bind(equivalent_to(), lyx::bind(&Buffer::fileName, _1), fname));
- if (it != bstore.end())
- return *it;
-
+ for (Buffer * b : bstore)
+ if (equivalent(b->fileName(), fname))
+ return b;
if (internal) {
// 1) cheap test, using string comparison of file names
- BufferStorage::const_iterator it = find_if(binternal.begin(), binternal.end(),
- lyx::bind(equal_to<FileName>(), lyx::bind(&Buffer::fileName, _1), fname));
- if (it != binternal.end())
- return *it;
+ for (Buffer * b : binternal)
+ if (b->fileName() == fname)
+ return b;
// 2) possibly expensive test, using equivalence test of file names
- it = find_if(binternal.begin(), binternal.end(),
- lyx::bind(equivalent_to(), lyx::bind(&Buffer::fileName, _1), fname));
- if (it != binternal.end())
- return *it;
+ for (Buffer * b : binternal)
+ if (equivalent(b->fileName(), fname))
+ return b;
}
-
return 0;
}
}
-bool BufferList::releaseChild(Buffer * parent, Buffer * child)
-{
- LASSERT(parent, return false);
- LASSERT(child, return false);
- LASSERT(parent->isChild(child), return false);
-
- // Child document has a different parent, don't close it.
- Buffer const * parent_ = child->parent();
- if (parent_ && parent_ != parent)
- return false;
-
- BufferStorage::iterator it = bstore.begin();
- BufferStorage::iterator end = bstore.end();
- for (; it != end; ++it) {
- Buffer * buf = *it;
- if (buf != parent && buf->isChild(child)) {
- child->setParent(0);
- return false;
- }
- }
- release(child);
- return true;
-}
-
-
void BufferList::changed(bool update_metrics) const
{
BufferStorage::const_iterator it = bstore.begin();