callback_tracker_internal.h.pump revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1$$ This is a pump file for generating file templates. Pump is a python 2$$ script that is part of the Google Test suite of utilities. Description 3$$ can be found here: 4$$ 5$$ http://code.google.com/p/googletest/wiki/PumpManual 6$$ 7$$ See comment for MAX_ARITY in base/bind.h.pump. 8$var MAX_ARITY = 7 9 10// Copyright 2014 The Chromium Authors. All rights reserved. 11// Use of this source code is governed by a BSD-style license that can be 12// found in the LICENSE file. 13 14#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_ 15#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_ 16 17#include "base/callback.h" 18#include "base/callback_internal.h" 19#include "base/memory/scoped_ptr.h" 20#include "base/memory/weak_ptr.h" 21 22namespace sync_file_system { 23namespace drive_backend { 24 25class CallbackTracker; 26 27namespace internal { 28 29class AbortHelper { 30 public: 31 explicit AbortHelper(CallbackTracker* tracker); 32 ~AbortHelper(); 33 base::WeakPtr<AbortHelper> AsWeakPtr(); 34 35 static scoped_ptr<AbortHelper> TakeOwnership( 36 const base::WeakPtr<AbortHelper>& abort_helper); 37 38 private: 39 CallbackTracker* tracker_; // Not owned. 40 base::WeakPtrFactory<AbortHelper> weak_ptr_factory_; 41 42 DISALLOW_COPY_AND_ASSIGN(AbortHelper); 43}; 44 45template <typename> 46struct InvokeAndInvalidateHelper; 47 48$range ARITY 0..MAX_ARITY 49$for ARITY [[ 50$range ARG 1..ARITY 51 52template <$for ARG , [[typename A$(ARG)]]> 53struct InvokeAndInvalidateHelper<void($for ARG , [[A$(ARG)]])> { 54 static void Run(const base::WeakPtr<AbortHelper>& abort_helper, 55 const base::Callback<void($for ARG , [[A$(ARG)]])>& callback 56$if ARITY != 0 [[, ]] 57$for ARG , [[A$(ARG) a$(ARG)]] 58) { 59 scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper); 60 if (deleter) { 61 callback.Run( 62$for ARG , [[base::internal::CallbackForward(a$(ARG))]]); 63 } 64 } 65}; 66 67]] $$ for ARITY 68 69} // namespace internal 70} // namespace drive_backend 71} // namespace sync_file_system 72 73#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_ 74