Skip to content

Commit 24c9a41

Browse files
authored
Refactored register_preamble (#149)
1 parent 426dd34 commit 24c9a41

File tree

8 files changed

+33
-37
lines changed

8 files changed

+33
-37
lines changed

include/xeus-cpp/xholder.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ namespace xcpp
3030
~xholder_preamble();
3131
xholder_preamble(const xholder_preamble& rhs);
3232
xholder_preamble(xholder_preamble&& rhs);
33-
xholder_preamble(xpreamble* holder);
33+
xholder_preamble(std::unique_ptr<xpreamble> holder);
3434

3535
xholder_preamble& operator=(const xholder_preamble& rhs);
3636
xholder_preamble& operator=(xholder_preamble&& rhs);
3737

38-
xholder_preamble& operator=(xpreamble* holder);
38+
xholder_preamble& operator=(std::unique_ptr<xpreamble> holder);
3939

4040
void swap(xholder_preamble& rhs)
4141
{
@@ -53,7 +53,7 @@ namespace xcpp
5353

5454
private:
5555

56-
xpreamble* p_holder;
56+
std::unique_ptr<xpreamble> p_holder;
5757
};
5858
}
5959
#endif

include/xeus-cpp/xmanager.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ namespace xcpp
3131
std::map<std::string, xholder_preamble> preamble;
3232

3333
template <typename preamble_type>
34-
void register_preamble(const std::string& name, preamble_type* pre)
34+
void register_preamble(const std::string& name, std::unique_ptr<preamble_type> pre)
3535
{
36-
preamble[name] = xholder_preamble(pre);
36+
preamble[name] = xholder_preamble(std::move(pre));
3737
}
3838

3939
void unregister_preamble(const std::string& name)
@@ -186,9 +186,9 @@ namespace xcpp
186186
}
187187
}
188188

189-
virtual xpreamble* clone() const override
189+
[[nodiscard]] std::unique_ptr<xpreamble> clone() const override
190190
{
191-
return new xmagics_manager(*this);
191+
return std::make_unique<xmagics_manager>(*this);
192192
}
193193

194194
private:

include/xeus-cpp/xpreamble.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace xcpp
3030
}
3131

3232
virtual void apply(const std::string& s, nl::json& kernel_res) = 0;
33-
virtual xpreamble* clone() const = 0;
33+
virtual std::unique_ptr<xpreamble> clone() const = 0;
3434
virtual ~xpreamble(){};
3535
};
3636
}

src/xholder.cpp

+6-8
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,22 @@ namespace xcpp
2424
{
2525
}
2626

27-
xholder_preamble::xholder_preamble(xpreamble* holder)
28-
: p_holder(holder)
27+
xholder_preamble::xholder_preamble(std::unique_ptr<xpreamble> holder)
28+
: p_holder(std::move(holder))
2929
{
3030
}
3131

3232
xholder_preamble::~xholder_preamble()
3333
{
34-
delete p_holder;
3534
}
3635

3736
xholder_preamble::xholder_preamble(const xholder_preamble& rhs)
38-
: p_holder(rhs.p_holder ? rhs.p_holder->clone() : nullptr)
37+
: p_holder(rhs.p_holder ? std::move(rhs.p_holder->clone()) : nullptr)
3938
{
4039
}
4140

4241
xholder_preamble::xholder_preamble(xholder_preamble&& rhs)
43-
: p_holder(rhs.p_holder)
42+
: p_holder(std::move(rhs.p_holder))
4443
{
4544
rhs.p_holder = nullptr;
4645
}
@@ -59,10 +58,9 @@ namespace xcpp
5958
return *this;
6059
}
6160

62-
xholder_preamble& xholder_preamble::operator=(xpreamble* holder)
61+
xholder_preamble& xholder_preamble::operator=(std::unique_ptr<xpreamble> holder)
6362
{
64-
delete p_holder;
65-
p_holder = holder;
63+
p_holder = std::move(holder);
6664
return *this;
6765
}
6866

src/xinspect.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,9 @@ namespace xcpp
279279
inspect(to_inspect[1], kernel_res);
280280
}
281281

282-
virtual xpreamble* clone() const override
282+
[[nodiscard]] std::unique_ptr<xpreamble> clone() const override
283283
{
284-
return new xintrospection(*this);
284+
return std::make_unique<xintrospection>(*this);
285285
}
286286
};
287287

src/xinterpreter.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,10 @@ __get_cxx_version ()
391391

392392
void interpreter::init_preamble()
393393
{
394-
// FIXME: Make register_preamble take a unique_ptr.
395394
//NOLINTBEGIN(cppcoreguidelines-owning-memory)
396-
preamble_manager.register_preamble("introspection", new xintrospection());
397-
preamble_manager.register_preamble("magics", new xmagics_manager());
398-
preamble_manager.register_preamble("shell", new xsystem());
395+
preamble_manager.register_preamble("introspection", std::make_unique<xintrospection>());
396+
preamble_manager.register_preamble("magics", std::make_unique<xmagics_manager>());
397+
preamble_manager.register_preamble("shell", std::make_unique<xsystem>());
399398
//NOLINTEND(cppcoreguidelines-owning-memory)
400399
}
401400

src/xsystem.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ namespace xcpp
6767
}
6868
}
6969

70-
virtual xpreamble* clone() const override
70+
[[nodiscard]] std::unique_ptr<xpreamble> clone() const override
7171
{
72-
return new xsystem(*this);
72+
return std::make_unique<xsystem>(*this);
7373
}
7474
};
7575
}

test/test_interpreter.cpp

+12-13
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ TEST_SUITE("clone_magics_manager")
407407
{
408408
xcpp::xmagics_manager manager;
409409

410-
xcpp::xpreamble* clone = manager.clone();
410+
std::unique_ptr<xcpp::xpreamble> clone = manager.clone();
411411

412412
REQUIRE(clone != nullptr);
413413
}
@@ -419,11 +419,9 @@ TEST_SUITE("clone_magics_manager")
419419
{
420420
xcpp::xmagics_manager manager;
421421

422-
xcpp::xpreamble* clone = manager.clone();
422+
std::unique_ptr<xcpp::xpreamble> clone = manager.clone();
423423

424-
REQUIRE(dynamic_cast<xcpp::xmagics_manager*>(clone) != nullptr);
425-
426-
delete clone;
424+
REQUIRE(clone.get() != nullptr);
427425
}
428426
}
429427

@@ -436,12 +434,13 @@ TEST_SUITE("xpreamble_manager_operator")
436434
{
437435
std::string name = "test";
438436
xcpp::xpreamble_manager manager;
439-
xcpp::xmagics_manager* magics = new xcpp::xmagics_manager();
440-
manager.register_preamble(name, magics);
437+
std::unique_ptr<xcpp::xmagics_manager> magics = std::make_unique<xcpp::xmagics_manager>();
438+
auto* raw_ptr = magics.get();
439+
manager.register_preamble(name, std::move(magics));
441440

442441
xcpp::xholder_preamble& result = manager.operator[](name);
443442

444-
REQUIRE(&(result.get_cast<xcpp::xmagics_manager>()) == magics);
443+
REQUIRE(&(result.get_cast<xcpp::xmagics_manager>()) == raw_ptr);
445444
}
446445
}
447446

@@ -642,7 +641,7 @@ TEST_SUITE("xsystem_clone")
642641
{
643642
xcpp::xsystem system;
644643

645-
xcpp::xpreamble* clone = system.clone();
644+
std::unique_ptr<xcpp::xpreamble> clone = system.clone();
646645

647646
REQUIRE(clone != nullptr);
648647
}
@@ -651,9 +650,9 @@ TEST_SUITE("xsystem_clone")
651650
{
652651
xcpp::xsystem system;
653652

654-
xcpp::xpreamble* clone = system.clone();
653+
std::unique_ptr<xcpp::xpreamble> clone = system.clone();
655654

656-
REQUIRE(dynamic_cast<xcpp::xsystem*>(clone) != nullptr);
655+
REQUIRE(clone.get() != nullptr);
657656

658657
}
659658
}
@@ -727,7 +726,7 @@ TEST_SUITE("xmagics_apply"){
727726

728727
xcpp::xpreamble_manager preamble_manager;
729728

730-
preamble_manager.register_preamble("magics", new xcpp::xmagics_manager());
729+
preamble_manager.register_preamble("magics", std::make_unique<xcpp::xmagics_manager>());
731730

732731
preamble_manager["magics"].get_cast<xcpp::xmagics_manager>().register_magic("magic2", MyMagicCell());
733732

@@ -742,7 +741,7 @@ TEST_SUITE("xmagics_apply"){
742741

743742
xcpp::xpreamble_manager preamble_manager;
744743

745-
preamble_manager.register_preamble("magics", new xcpp::xmagics_manager());
744+
preamble_manager.register_preamble("magics", std::make_unique<xcpp::xmagics_manager>());
746745

747746
preamble_manager["magics"].get_cast<xcpp::xmagics_manager>().register_magic("magic1", MyMagicLine());
748747

0 commit comments

Comments
 (0)