1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_JOURNAL_FUTURE_H
5 #define CEPH_JOURNAL_FUTURE_H
7 #include "include/int_types.h"
10 #include <boost/intrusive_ptr.hpp>
11 #include "include/assert.h"
21 typedef boost::intrusive_ptr<FutureImpl> FutureImplPtr;
24 Future(const FutureImplPtr &future_impl) : m_future_impl(future_impl) {}
26 inline bool is_valid() const {
27 return m_future_impl.get() != nullptr;
30 void flush(Context *on_safe);
31 void wait(Context *on_safe);
33 bool is_complete() const;
34 int get_return_value() const;
37 friend class Journaler;
38 friend std::ostream& operator<<(std::ostream&, const Future&);
40 inline FutureImplPtr get_future_impl() const {
44 FutureImplPtr m_future_impl;
47 void intrusive_ptr_add_ref(FutureImpl *p);
48 void intrusive_ptr_release(FutureImpl *p);
50 std::ostream &operator<<(std::ostream &os, const Future &future);
52 } // namespace journal
54 using journal::intrusive_ptr_add_ref;
55 using journal::intrusive_ptr_release;
56 using journal::operator<<;
58 #endif // CEPH_JOURNAL_FUTURE_H