Move Trackable class to Server.h

This commit is contained in:
Yuriy Skalko 2020-12-16 12:07:42 +02:00
parent 4f0981e7bb
commit d9e455b61a
3 changed files with 17 additions and 30 deletions

View File

@ -55,7 +55,6 @@
#include "support/lassert.h" #include "support/lassert.h"
#include "support/lstrings.h" #include "support/lstrings.h"
#include "support/os.h" #include "support/os.h"
#include "support/signals.h"
#include <iostream> #include <iostream>

View File

@ -14,8 +14,7 @@
#ifndef SERVER_H #ifndef SERVER_H
#define SERVER_H #define SERVER_H
#include "support/signals.h" #include <memory>
#include <vector> #include <vector>
#ifdef _WIN32 #ifdef _WIN32
@ -30,6 +29,21 @@ namespace lyx {
class Server; class Server;
/// A small utility to track the lifetime of an object.
class Trackable {
public:
Trackable() : p_(std::make_shared<int>(0)) {}
Trackable(Trackable const &) : Trackable() {}
Trackable(Trackable &&) : Trackable() {}
Trackable & operator=(Trackable const &) { return *this; }
Trackable & operator=(Trackable &&) { return *this; }
// This weak pointer lets you know if the parent object has been destroyed
std::weak_ptr<void> p() const { return p_; }
private:
std::shared_ptr<void> const p_;
};
/** This class manages the pipes used for communicating with clients. /** This class manages the pipes used for communicating with clients.
Usage: Initialize with pipe-filename-base, client class to receive Usage: Initialize with pipe-filename-base, client class to receive
messages, and callback-function that will be called with the messages. messages, and callback-function that will be called with the messages.
@ -191,7 +205,7 @@ private:
bool deferred_loading_; bool deferred_loading_;
/// Track object's liveness /// Track object's liveness
support::Trackable tracker_; Trackable tracker_;
}; };

View File

@ -14,38 +14,12 @@
#include <nod.hpp> #include <nod.hpp>
#include <memory>
namespace lyx { namespace lyx {
using nod::signal; using nod::signal;
using nod::connection; using nod::connection;
using nod::scoped_connection; using nod::scoped_connection;
namespace support {
/// A small utility to use with signals2::slot_type::track_foreign when the
/// parent object is not handled by a shared_ptr, or to track the lifetime of an
/// object. Using Trackable to track lifetimes is less thread-safe than tracking
/// their parents directly with a shared_ptr as recommended by signals2, but it
/// makes it easier for transitioning old code. (Essentially because Trackable
/// will not prevent the deletion of the parent by a concurrent thread.)
class Trackable {
public:
Trackable() : p_(std::make_shared<int>(0)) {}
Trackable(Trackable const &) : Trackable() {}
Trackable(Trackable &&) : Trackable() {}
Trackable & operator=(Trackable const &) { return *this; }
Trackable & operator=(Trackable &&) { return *this; }
// This weak pointer lets you know if the parent object has been destroyed
std::weak_ptr<void> p() const { return p_; }
private:
std::shared_ptr<void> const p_;
};
} // namespace support
} // namespace lyx } // namespace lyx
#endif #endif