146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ This is a pump file for generating file templates. Pump is a python 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ script that is part of the Google Test suite of utilities. Description 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ can be found here: 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ http://code.google.com/p/googletest/wiki/PumpManual 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$$ See comment for MAX_ARITY in base/bind.h.pump. 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$var MAX_ARITY = 7 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_ 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_ 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/callback.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/callback_internal.h" 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/weak_ptr.h" 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace sync_file_system { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace drive_backend { 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class CallbackTracker; 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace internal { 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class AbortHelper { 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) explicit AbortHelper(CallbackTracker* tracker); 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ~AbortHelper(); 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WeakPtr<AbortHelper> AsWeakPtr(); 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static scoped_ptr<AbortHelper> TakeOwnership( 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::WeakPtr<AbortHelper>& abort_helper); 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CallbackTracker* tracker_; // Not owned. 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::WeakPtrFactory<AbortHelper> weak_ptr_factory_; 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AbortHelper); 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)template <typename> 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)struct InvokeAndInvalidateHelper; 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$range ARITY 0..MAX_ARITY 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$for ARITY [[ 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$range ARG 1..ARITY 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)template <$for ARG , [[typename A$(ARG)]]> 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)struct InvokeAndInvalidateHelper<void($for ARG , [[A$(ARG)]])> { 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static void Run(const base::WeakPtr<AbortHelper>& abort_helper, 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::Callback<void($for ARG , [[A$(ARG)]])>& callback 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$if ARITY != 0 [[, ]] 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$for ARG , [[A$(ARG) a$(ARG)]] 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)) { 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper); 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (deleter) { 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) callback.Run( 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)$for ARG , [[base::internal::CallbackForward(a$(ARG))]]); 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)]] $$ for ARITY 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace internal 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace drive_backend 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace sync_file_system 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_ 74