lib/nfs/Manager: gcc 4.7 compatibility hack
std::map::emplace() is only available from gcc 4.8 on.
This commit is contained in:
parent
c99559dbe9
commit
eb8fd07900
|
@ -103,6 +103,22 @@ public:
|
|||
server(_server), export_name(_export_name),
|
||||
context(nullptr) {}
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__) && !GCC_CHECK_VERSION(4,8)
|
||||
/* needed for NfsManager::GetConnection() due to lack of
|
||||
std::map::emplace() */
|
||||
NfsConnection(NfsConnection &&other)
|
||||
:SocketMonitor(((SocketMonitor &)other).GetEventLoop()),
|
||||
DeferredMonitor(((DeferredMonitor &)other).GetEventLoop()),
|
||||
server(std::move(other.server)),
|
||||
export_name(std::move(other.export_name)),
|
||||
context(nullptr) {
|
||||
assert(other.context == nullptr);
|
||||
assert(other.new_leases.empty());
|
||||
assert(other.active_leases.empty());
|
||||
assert(other.callbacks.IsEmpty());
|
||||
}
|
||||
#endif
|
||||
|
||||
~NfsConnection();
|
||||
|
||||
gcc_pure
|
||||
|
|
|
@ -39,10 +39,19 @@ NfsManager::GetConnection(const char *server, const char *export_name)
|
|||
|
||||
const std::string key = Key(server, export_name);
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__) && !GCC_CHECK_VERSION(4,8)
|
||||
/* std::map::emplace() not available; this hack uses the move
|
||||
constructor */
|
||||
auto e = connections.insert(std::make_pair(key,
|
||||
ManagedConnection(*this, loop,
|
||||
server,
|
||||
export_name)));
|
||||
#else
|
||||
auto e = connections.emplace(std::piecewise_construct,
|
||||
std::forward_as_tuple(key),
|
||||
std::forward_as_tuple(*this, loop,
|
||||
server,
|
||||
export_name));
|
||||
#endif
|
||||
return e.first->second;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,13 @@ class NfsManager {
|
|||
:NfsConnection(_loop, _server, _export_name),
|
||||
manager(_manager) {}
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__) && !GCC_CHECK_VERSION(4,8)
|
||||
/* needed due to lack of std::map::emplace() */
|
||||
ManagedConnection(ManagedConnection &&other)
|
||||
:NfsConnection(std::move(other)),
|
||||
manager(other.manager) {}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
/* virtual methods from NfsConnection */
|
||||
void OnNfsConnectionError(Error &&error) override;
|
||||
|
|
Loading…
Reference in New Issue