• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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