Embedded Multicore Building Blocks V1.0.0
task.h
1 /*
2  * Copyright (c) 2014-2017, Siemens AG. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #ifndef EMBB_MTAPI_TASK_H_
28 #define EMBB_MTAPI_TASK_H_
29 
30 #include <embb/mtapi/c/mtapi.h>
31 #include <embb/mtapi/internal/check_status.h>
32 
33 namespace embb {
34 namespace mtapi {
35 
41 class Task {
42  public:
47  Task() {
48  handle_.id = 0;
49  handle_.tag = 0;
50  }
51 
57  Task const & other
58  ) : handle_(other.handle_) {
59  // emtpy
60  }
61 
66  void operator=(
67  Task const & other
68  ) {
69  handle_ = other.handle_;
70  }
71 
76  ~Task() {
77  // empty
78  }
79 
86  mtapi_status_t Wait(
87  mtapi_timeout_t timeout
89  ) {
90  mtapi_status_t status;
91  mtapi_task_wait(handle_, timeout, &status);
92  return status;
93  }
94 
100  mtapi_status_t Wait() {
101  mtapi_status_t status;
102  mtapi_task_wait(handle_, MTAPI_INFINITE, &status);
103  return status;
104  }
105 
110  void Cancel() {
111  mtapi_status_t status;
112  mtapi_task_cancel(handle_, &status);
113  internal::CheckStatus(status);
114  }
115 
123  mtapi_task_hndl_t GetInternal() const {
124  return handle_;
125  }
126 
127  private:
128  explicit Task(mtapi_task_hndl_t handle)
129  : handle_(handle) {
130  // empty
131  }
132 
133  mtapi_task_hndl_t handle_;
134 
135  friend class Node;
136  friend class Group;
137  friend class Queue;
138 };
139 
140 } // namespace mtapi
141 } // namespace embb
142 
143 #endif // EMBB_MTAPI_TASK_H_
Definition: lock_free_mpmc_queue.h:40
A singleton representing the MTAPI runtime.
Definition: node.h:70
void mtapi_task_wait(const mtapi_task_hndl_t task, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function waits for the completion of the specified task.
mtapi_status_t Wait(mtapi_timeout_t timeout)
Waits for Task to finish for timeout milliseconds.
Definition: task.h:86
Task()
Constructs an invalid Task.
Definition: task.h:47
void Cancel()
Signals the Task to cancel computation.
Definition: task.h:110
mtapi_status_t Wait()
Waits for Task to finish.
Definition: task.h:100
Allows for stream processing, either ordered or unordered.
Definition: queue.h:52
void operator=(Task const &other)
Copies a Task.
Definition: task.h:66
mtapi_task_hndl_t GetInternal() const
Returns the internal representation of this object.
Definition: task.h:123
Task(Task const &other)
Copies a Task.
Definition: task.h:56
~Task()
Destroys a Task.
Definition: task.h:76
Represents a facility to wait for multiple related Tasks.
Definition: group.h:52
A Task represents a running Action of a specific Job.
Definition: task.h:41
void mtapi_task_cancel(const mtapi_task_hndl_t task, mtapi_status_t *status)
This function cancels a task and sets the task status to MTAPI_TASK_CANCELLED.