Line data Source code
1 : /*! 2 : * \file esys/repo/progresscallback_t.h 3 : * \brief Progresscallback t for esysrepo 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2020 Michel Gillet 9 : * Distributed under the MIT License. 10 : * (See accompanying file LICENSE.txt or 11 : * copy at https://opensource.org/licenses/MIT) 12 : * 13 : * __legal_e__ 14 : * \endcond 15 : * 16 : */ 17 : 18 : #pragma once 19 : 20 : #include "esys/repo/esysrepo_defs.h" 21 : #include "esys/repo/progresscallbackbase.h" 22 : 23 : //<swig_inc/> 24 : 25 : namespace esys 26 : { 27 : 28 : namespace repo 29 : { 30 : 31 : /*! \tparam OBJ the callee object type */ 32 : template<typename OBJ> 33 : class ProgressCallback_t : public ProgressCallbackBase 34 : { 35 : public: 36 : typedef void (OBJ::*CallbackType)(const git::Progress &progress); 37 : 38 : //! Constructor 39 : ProgressCallback_t(); 40 : 41 : //! Constructor 42 : /*! 43 : * \param[in] callee the callee 44 : * \param[in] callback the callback 45 : */ 46 : ProgressCallback_t(OBJ *callee, CallbackType callback); 47 : 48 : //! Destructor 49 : ~ProgressCallback_t() override; 50 : 51 : //! Set the callee 52 : /*! 53 : * \param[in] callee the callee 54 : */ 55 : void set_callee(OBJ *callee); 56 : 57 : //! Get the callee object 58 : /*! 59 : * \return the callee object 60 : */ 61 : OBJ *get_callee(); 62 : 63 : //! Set the callback 64 : /*! 65 : * \param[in] callback the callback 66 : */ 67 : void set_callback(CallbackType callback); 68 : 69 : //! Get the callback 70 : /*! 71 : * \return the callback 72 : */ 73 : CallbackType get_callback(); 74 : 75 : //! Notify git progress 76 : /*! 77 : * \param[in] progress the progress 78 : */ 79 : void git_progress_notif(const git::Progress &progress) override; 80 : 81 : ProgressCallback_t(const ProgressCallback_t &) = delete; 82 : ProgressCallback_t(ProgressCallback_t &&) = delete; 83 : ProgressCallback_t &operator=(const ProgressCallback_t &other) = delete; 84 : 85 : private: 86 : //!< \cond DOXY_IMPL 87 : OBJ *m_callee = nullptr; //!< The callee object 88 : CallbackType m_callback = nullptr; //!< The member function callback 89 : //!< \endcond 90 : }; 91 : 92 : template<typename OBJ> 93 : ProgressCallback_t<OBJ>::ProgressCallback_t() 94 : { 95 : } 96 : 97 : template<typename OBJ> 98 125 : ProgressCallback_t<OBJ>::ProgressCallback_t(OBJ *callee, CallbackType callback) 99 125 : : m_callee(callee) 100 125 : , m_callback(callback) 101 : { 102 : } 103 : 104 : template<typename OBJ> 105 125 : ProgressCallback_t<OBJ>::~ProgressCallback_t() 106 : { 107 125 : } 108 : 109 : template<typename OBJ> 110 : void ProgressCallback_t<OBJ>::set_callee(OBJ *callee) 111 : { 112 : m_callee = callee; 113 : } 114 : 115 : template<typename OBJ> 116 : OBJ *ProgressCallback_t<OBJ>::get_callee() 117 : { 118 : return m_callee; 119 : } 120 : 121 : template<typename OBJ> 122 : void ProgressCallback_t<OBJ>::set_callback(CallbackType callback) 123 : { 124 : m_callback = callback; 125 : } 126 : 127 : template<typename OBJ> 128 : typename ProgressCallback_t<OBJ>::CallbackType ProgressCallback_t<OBJ>::get_callback() 129 : { 130 : return m_callback; 131 : } 132 : 133 : template<typename OBJ> 134 1155 : void ProgressCallback_t<OBJ>::git_progress_notif(const git::Progress &progress) 135 : { 136 1155 : if (m_callee == nullptr) return; 137 1155 : if (m_callback == nullptr) return; 138 : 139 1155 : (m_callee->*m_callback)(progress); 140 : } 141 : 142 : } // namespace repo 143 : 144 : } // namespace esys