1 /* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_BASE_TASKPARENT_H__ 12 #define WEBRTC_BASE_TASKPARENT_H__ 13 14 #include <set> 15 16 #include "webrtc/base/basictypes.h" 17 #include "webrtc/base/scoped_ptr.h" 18 19 namespace rtc { 20 21 class Task; 22 class TaskRunner; 23 24 class TaskParent { 25 public: 26 TaskParent(Task *derived_instance, TaskParent *parent); 27 explicit TaskParent(TaskRunner *derived_instance); 28 virtual ~TaskParent(); 29 GetParent()30 TaskParent *GetParent() { return parent_; } GetRunner()31 TaskRunner *GetRunner() { return runner_; } 32 33 bool AllChildrenDone(); 34 bool AnyChildError(); 35 #if !defined(NDEBUG) 36 bool IsChildTask(Task *task); 37 #endif 38 39 protected: 40 void OnStopped(Task *task); 41 void AbortAllChildren(); parent()42 TaskParent *parent() { 43 return parent_; 44 } 45 46 private: 47 void Initialize(); 48 void OnChildStopped(Task *child); 49 void AddChild(Task *child); 50 51 TaskParent *parent_; 52 TaskRunner *runner_; 53 bool child_error_; 54 typedef std::set<Task *> ChildSet; 55 scoped_ptr<ChildSet> children_; 56 RTC_DISALLOW_COPY_AND_ASSIGN(TaskParent); 57 }; 58 59 60 } // namespace rtc 61 62 #endif // WEBRTC_BASE_TASKPARENT_H__ 63