Skip to content

Commit aec719a

Browse files
committed
Use shared_ptr in IEngine::deinitClone()
1 parent 4b9584d commit aec719a

File tree

9 files changed

+18
-16
lines changed

9 files changed

+18
-16
lines changed

include/scratchcpp/iengine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class LIBSCRATCHCPP_EXPORT IEngine
7676
virtual void initClone(std::shared_ptr<Sprite> clone) = 0;
7777

7878
/*! Automatically called from clones that are being deleted. */
79-
virtual void deinitClone(Sprite *clone) = 0;
79+
virtual void deinitClone(std::shared_ptr<Sprite> clone) = 0;
8080

8181
/*!
8282
* Calls and runs "when green flag clicked" blocks.

include/scratchcpp/sprite.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ class IGraphicsEffect;
1313
class SpritePrivate;
1414

1515
/*! \brief The Sprite class represents a Scratch sprite. */
16-
class LIBSCRATCHCPP_EXPORT Sprite : public Target
16+
class LIBSCRATCHCPP_EXPORT Sprite
17+
: public Target
18+
, public std::enable_shared_from_this<Sprite>
1719
{
1820
public:
1921
enum class RotationStyle

src/engine/internal/engine.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,10 @@ void Engine::initClone(std::shared_ptr<Sprite> clone)
315315
m_executableTargets.push_back(clone.get()); // execution order needs to be updated after this
316316
}
317317

318-
void Engine::deinitClone(Sprite *clone)
318+
void Engine::deinitClone(std::shared_ptr<Sprite> clone)
319319
{
320-
m_clones.erase(std::remove(m_clones.begin(), m_clones.end(), clone), m_clones.end());
321-
m_executableTargets.erase(std::remove(m_executableTargets.begin(), m_executableTargets.end(), clone), m_executableTargets.end());
320+
m_clones.erase(std::remove(m_clones.begin(), m_clones.end(), clone.get()), m_clones.end());
321+
m_executableTargets.erase(std::remove(m_executableTargets.begin(), m_executableTargets.end(), clone.get()), m_executableTargets.end());
322322
}
323323

324324
void Engine::run()

src/engine/internal/engine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Engine : public IEngine
3737
void stopScript(VirtualMachine *vm) override;
3838
void stopTarget(Target *target, VirtualMachine *exceptScript) override;
3939
void initClone(std::shared_ptr<Sprite> clone) override;
40-
void deinitClone(libscratchcpp::Sprite *clone) override;
40+
void deinitClone(std::shared_ptr<Sprite> clone) override;
4141

4242
void run() override;
4343
void runEventLoop() override;

src/scratch/sprite.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ void Sprite::deleteClone()
9999
IEngine *eng = engine();
100100

101101
if (eng)
102-
eng->deinitClone(this);
102+
eng->deinitClone(shared_from_this());
103103

104104
assert(impl->cloneSprite);
105105
impl->cloneDeleted = true;

test/blocks/control_blocks_test.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -949,10 +949,10 @@ TEST_F(ControlBlocksTest, CreateCloneOfImpl)
949949
ASSERT_EQ(vm.registerCount(), 0);
950950
ASSERT_EQ(sprite.clones().size(), 4);
951951

952-
EXPECT_CALL(m_engineMock, deinitClone(clone1.get()));
952+
EXPECT_CALL(m_engineMock, deinitClone(clone1));
953953
clone1->deleteClone();
954954

955-
EXPECT_CALL(m_engineMock, deinitClone(clone3.get()));
955+
EXPECT_CALL(m_engineMock, deinitClone(clone3));
956956
clone3->deleteClone();
957957
}
958958

@@ -1007,7 +1007,7 @@ TEST_F(ControlBlocksTest, DeleteThisCloneImpl)
10071007
vm.setFunctions(functions);
10081008

10091009
EXPECT_CALL(m_engineMock, stopTarget(clone.get(), nullptr)).Times(1);
1010-
EXPECT_CALL(m_engineMock, deinitClone(clone.get()));
1010+
EXPECT_CALL(m_engineMock, deinitClone(clone));
10111011

10121012
vm.setBytecode(bytecode);
10131013
vm.run();

test/mocks/enginemock.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class EngineMock : public IEngine
2222
MOCK_METHOD(void, stopScript, (VirtualMachine *), (override));
2323
MOCK_METHOD(void, stopTarget, (Target *, VirtualMachine *), (override));
2424
MOCK_METHOD(void, initClone, (std::shared_ptr<Sprite>), (override));
25-
MOCK_METHOD(void, deinitClone, (Sprite *), (override));
25+
MOCK_METHOD(void, deinitClone, (std::shared_ptr<Sprite>), (override));
2626

2727
MOCK_METHOD(void, run, (), (override));
2828
MOCK_METHOD(void, runEventLoop, (), (override));

test/scratch_classes/sprite_test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,28 +199,28 @@ TEST(SpriteTest, Clone)
199199
ASSERT_EQ(clone2->costumes(), sprite.costumes());
200200

201201
// Delete
202-
EXPECT_CALL(engine, deinitClone(clone1.get()));
202+
EXPECT_CALL(engine, deinitClone(clone1));
203203
clone1->deleteClone();
204204

205205
ASSERT_EQ(clones.size(), 3);
206206
ASSERT_EQ(clones[0], clone2);
207207
ASSERT_EQ(clones[1], clone3);
208208
ASSERT_EQ(clones[2], clone4);
209209

210-
EXPECT_CALL(engine, deinitClone(clone3.get()));
210+
EXPECT_CALL(engine, deinitClone(clone3));
211211
clone3->deleteClone();
212212

213213
ASSERT_EQ(clones.size(), 2);
214214
ASSERT_EQ(clones[0], clone2);
215215
ASSERT_EQ(clones[1], clone4);
216216

217-
EXPECT_CALL(engine, deinitClone(clone2.get()));
217+
EXPECT_CALL(engine, deinitClone(clone2));
218218
clone2->deleteClone();
219219

220220
ASSERT_EQ(clones.size(), 1);
221221
ASSERT_EQ(clones[0], clone4);
222222

223-
EXPECT_CALL(engine, deinitClone(clone4.get()));
223+
EXPECT_CALL(engine, deinitClone(clone4));
224224
clone4->deleteClone();
225225
ASSERT_TRUE(clones.empty());
226226
}

test/script/script_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,6 @@ TEST_F(ScriptTest, Start)
141141
ASSERT_EQ(vm->lists()[0], lists[0]);
142142
ASSERT_EQ(vm->lists()[1], clone->listAt(clone->findListById("d")).get());
143143

144-
EXPECT_CALL(m_engine, deinitClone(clone.get()));
144+
EXPECT_CALL(m_engine, deinitClone(clone));
145145
clone->deleteClone();
146146
}

0 commit comments

Comments
 (0)