Skip to content

Commit 725fb50

Browse files
committed
Add Promise class
1 parent 6ea5644 commit 725fb50

File tree

8 files changed

+100
-0
lines changed

8 files changed

+100
-0
lines changed

include/scratchcpp/dev/promise.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#pragma once
4+
5+
#include "../global.h"
6+
#include "../spimpl.h"
7+
8+
namespace libscratchcpp
9+
{
10+
11+
class PromisePrivate;
12+
13+
/*! \brief The Promise class represents the eventual completion of an asynchronous operation. */
14+
class LIBSCRATCHCPP_EXPORT Promise
15+
{
16+
public:
17+
Promise();
18+
Promise(const Promise &) = delete;
19+
20+
bool isResolved() const;
21+
void resolve();
22+
23+
private:
24+
spimpl::unique_impl_ptr<PromisePrivate> impl;
25+
};
26+
27+
} // namespace libscratchcpp

src/dev/engine/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ target_sources(scratchcpp
1212
executioncontext.cpp
1313
executioncontext_p.cpp
1414
executioncontext_p.h
15+
promise.cpp
16+
promise_p.cpp
17+
promise_p.h
1518
internal/icodebuilder.h
1619
internal/icodebuilderfactory.h
1720
internal/codebuilderfactory.cpp

src/dev/engine/promise.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#include <scratchcpp/dev/promise.h>
4+
5+
#include "promise_p.h"
6+
7+
using namespace libscratchcpp;
8+
9+
/*! Constructs Promise. */
10+
Promise::Promise() :
11+
impl(spimpl::make_unique_impl<PromisePrivate>())
12+
{
13+
}
14+
15+
/*! Returns true if the promise is resolved. */
16+
bool Promise::isResolved() const
17+
{
18+
return impl->isResolved;
19+
}
20+
21+
/*! Marks the promise as resolved. */
22+
void Promise::resolve()
23+
{
24+
impl->isResolved = true;
25+
}

src/dev/engine/promise_p.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#include "promise_p.h"
4+
5+
using namespace libscratchcpp;

src/dev/engine/promise_p.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
#pragma once
4+
5+
namespace libscratchcpp
6+
{
7+
8+
struct PromisePrivate
9+
{
10+
bool isResolved = false;
11+
};
12+
13+
} // namespace libscratchcpp

test/dev/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ add_subdirectory(blocks)
22
add_subdirectory(executioncontext)
33
add_subdirectory(llvm)
44
add_subdirectory(compiler)
5+
add_subdirectory(promise)

test/dev/promise/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
add_executable(
2+
promise_test
3+
promise_test.cpp
4+
)
5+
6+
target_link_libraries(
7+
promise_test
8+
GTest::gtest_main
9+
scratchcpp
10+
)
11+
12+
gtest_discover_tests(promise_test)

test/dev/promise/promise_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include <scratchcpp/dev/promise.h>
2+
3+
#include "../../common.h"
4+
5+
using namespace libscratchcpp;
6+
7+
TEST(PromiseTest, Resolve)
8+
{
9+
Promise promise;
10+
ASSERT_FALSE(promise.isResolved());
11+
12+
promise.resolve();
13+
ASSERT_TRUE(promise.isResolved());
14+
}

0 commit comments

Comments
 (0)