Skip to content

Commit 4fb5ead

Browse files
committed
refactor: refactoring some confusing code
1 parent 92b22de commit 4fb5ead

File tree

1 file changed

+63
-75
lines changed

1 file changed

+63
-75
lines changed

src/legacy/api/NbtAPI.cpp

Lines changed: 63 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,10 @@ Local<Value> NbtByteClass::pack(ByteTag* tag, bool noDelete) {
356356
try {
357357
if (noDelete) // unique_ptr 共享指针 + noDelete
358358
{
359-
std::unique_ptr<ByteTag> nbt(tag);
360-
auto* nbtObj = new NbtByteClass(std::move(nbt));
361-
nbtObj->canDelete = false;
359+
NbtByteClass* nbtObj = new NbtByteClass(std::unique_ptr<ByteTag>(tag));
360+
nbtObj->canDelete = false;
362361
return nbtObj->getScriptObject();
363-
} else return (new NbtByteClass(std::make_unique<ByteTag>(tag->as<ByteTag>())))->getScriptObject();
362+
} else return (new NbtByteClass(std::unique_ptr<ByteTag>(tag)))->getScriptObject();
364363
}
365364
CATCH("Fail in construct NbtByte!");
366365
}
@@ -428,11 +427,10 @@ Local<Value> NbtIntClass::pack(IntTag* tag, bool noDelete) {
428427
try {
429428
if (noDelete) // unique_ptr 共享指针 + noDelete
430429
{
431-
std::unique_ptr<IntTag> nbt(tag);
432-
auto* nbtObj = new NbtIntClass(std::move(nbt));
433-
nbtObj->canDelete = false;
430+
NbtIntClass* nbtObj = new NbtIntClass(std::unique_ptr<IntTag>(tag));
431+
nbtObj->canDelete = false;
434432
return nbtObj->getScriptObject();
435-
} else return (new NbtIntClass(std::make_unique<IntTag>(tag->as<IntTag>())))->getScriptObject();
433+
} else return (new NbtIntClass(std::unique_ptr<IntTag>(tag)))->getScriptObject();
436434
}
437435
CATCH("Fail in construct NbtInt!");
438436
}
@@ -501,11 +499,10 @@ Local<Value> NbtShortClass::pack(ShortTag* tag, bool noDelete) {
501499
try {
502500
if (noDelete) // unique_ptr 共享指针 + noDelete
503501
{
504-
std::unique_ptr<ShortTag> nbt(tag);
505-
auto* nbtObj = new NbtShortClass(std::move(nbt));
506-
nbtObj->canDelete = false;
502+
NbtShortClass* nbtObj = new NbtShortClass(std::unique_ptr<ShortTag>(tag));
503+
nbtObj->canDelete = false;
507504
return nbtObj->getScriptObject();
508-
} else return (new NbtShortClass(std::make_unique<ShortTag>(tag->as<ShortTag>())))->getScriptObject();
505+
} else return (new NbtShortClass(std::unique_ptr<ShortTag>(tag)))->getScriptObject();
509506
}
510507
CATCH("Fail in construct NbtShort!");
511508
}
@@ -573,11 +570,10 @@ Local<Value> NbtLongClass::pack(Int64Tag* tag, bool noDelete) {
573570
try {
574571
if (noDelete) // unique_ptr 共享指针 + noDelete
575572
{
576-
std::unique_ptr<Int64Tag> nbt(tag);
577-
auto* nbtObj = new NbtLongClass(std::move(nbt));
578-
nbtObj->canDelete = false;
573+
NbtLongClass* nbtObj = new NbtLongClass(std::unique_ptr<Int64Tag>(tag));
574+
nbtObj->canDelete = false;
579575
return nbtObj->getScriptObject();
580-
} else return (new NbtLongClass(std::make_unique<Int64Tag>(tag->as<Int64Tag>())))->getScriptObject();
576+
} else return (new NbtLongClass(std::unique_ptr<Int64Tag>(tag)))->getScriptObject();
581577
}
582578
CATCH("Fail in construct NbtLong!");
583579
}
@@ -646,11 +642,10 @@ Local<Value> NbtFloatClass::pack(FloatTag* tag, bool noDelete) {
646642
try {
647643
if (noDelete) // unique_ptr 共享指针 + noDelete
648644
{
649-
std::unique_ptr<FloatTag> nbt(tag);
650-
auto* nbtObj = new NbtFloatClass(std::move(nbt));
651-
nbtObj->canDelete = false;
645+
NbtFloatClass* nbtObj = new NbtFloatClass(std::unique_ptr<FloatTag>(tag));
646+
nbtObj->canDelete = false;
652647
return nbtObj->getScriptObject();
653-
} else return (new NbtFloatClass(std::make_unique<FloatTag>(tag->as<FloatTag>())))->getScriptObject();
648+
} else return (new NbtFloatClass(std::unique_ptr<FloatTag>(tag)))->getScriptObject();
654649
}
655650
CATCH("Fail in construct NbtFloat!");
656651
}
@@ -719,11 +714,10 @@ Local<Value> NbtDoubleClass::pack(DoubleTag* tag, bool noDelete) {
719714
try {
720715
if (noDelete) // unique_ptr 共享指针 + noDelete
721716
{
722-
std::unique_ptr<DoubleTag> nbt(tag);
723-
auto* nbtObj = new NbtDoubleClass(std::move(nbt));
724-
nbtObj->canDelete = false;
717+
NbtDoubleClass* nbtObj = new NbtDoubleClass(std::unique_ptr<DoubleTag>(tag));
718+
nbtObj->canDelete = false;
725719
return nbtObj->getScriptObject();
726-
} else return (new NbtDoubleClass(std::make_unique<DoubleTag>(tag->as<DoubleTag>())))->getScriptObject();
720+
} else return (new NbtDoubleClass(std::unique_ptr<DoubleTag>(tag)))->getScriptObject();
727721
}
728722
CATCH("Fail in construct NbtDouble!");
729723
}
@@ -792,11 +786,10 @@ Local<Value> NbtStringClass::pack(StringTag* tag, bool noDelete) {
792786
try {
793787
if (noDelete) // unique_ptr 共享指针 + noDelete
794788
{
795-
std::unique_ptr<StringTag> nbt(tag);
796-
auto* nbtObj = new NbtStringClass(std::move(nbt));
797-
nbtObj->canDelete = false;
789+
NbtStringClass* nbtObj = new NbtStringClass(std::unique_ptr<StringTag>(tag));
790+
nbtObj->canDelete = false;
798791
return nbtObj->getScriptObject();
799-
} else return (new NbtStringClass(std::make_unique<StringTag>(tag->as<StringTag>())))->getScriptObject();
792+
} else return (new NbtStringClass(std::unique_ptr<StringTag>(tag)))->getScriptObject();
800793
}
801794
CATCH("Fail in construct NbtString!");
802795
}
@@ -871,12 +864,10 @@ Local<Value> NbtByteArrayClass::pack(ByteArrayTag* tag, bool noDelete) {
871864
try {
872865
if (noDelete) // unique_ptr 共享指针 + noDelete
873866
{
874-
std::unique_ptr<ByteArrayTag> nbt(tag);
875-
auto* nbtObj = new NbtByteArrayClass(std::move(nbt));
876-
nbtObj->canDelete = false;
867+
NbtByteArrayClass* nbtObj = new NbtByteArrayClass(std::unique_ptr<ByteArrayTag>(tag));
868+
nbtObj->canDelete = false;
877869
return nbtObj->getScriptObject();
878-
} else
879-
return (new NbtByteArrayClass(std::make_unique<ByteArrayTag>(tag->as<ByteArrayTag>())))->getScriptObject();
870+
} else return (new NbtByteArrayClass(std::unique_ptr<ByteArrayTag>(tag)))->getScriptObject();
880871
}
881872
CATCH("Fail in construct NbtByteArray!");
882873
}
@@ -1002,9 +993,8 @@ Local<Value> NbtListClass::pack(ListTag* tag, bool noDelete) {
1002993
try {
1003994
if (noDelete) // unique_ptr 共享指针 + noDelete
1004995
{
1005-
std::unique_ptr<ListTag> nbt(tag);
1006-
auto* nbtObj = new NbtListClass(std::move(nbt));
1007-
nbtObj->canDelete = false;
996+
NbtListClass* nbtObj = new NbtListClass(std::unique_ptr<ListTag>(tag));
997+
nbtObj->canDelete = false;
1008998
return nbtObj->getScriptObject();
1009999
} else return (new NbtListClass(std::unique_ptr<ListTag>(tag)))->getScriptObject();
10101000
}
@@ -1399,8 +1389,7 @@ Local<Value> NbtListClass::getTag(const Arguments& args) {
13991389
res = NbtListClass::pack(nbt->at(index)->as_ptr<ListTag>(), true); // share ptr
14001390
break;
14011391
case Tag::Type::Compound:
1402-
res = NbtCompoundClass::pack(nbt->at(index)->as_ptr<CompoundTag>(),
1403-
true); // share ptr
1392+
res = NbtCompoundClass::pack(nbt->at(index)->as_ptr<CompoundTag>(), true); // share ptr
14041393
break;
14051394
case Tag::Type::End:
14061395
default:
@@ -1503,9 +1492,8 @@ Local<Value> NbtCompoundClass::pack(CompoundTag* tag, bool noDelete) {
15031492
try {
15041493
if (noDelete) // unique_ptr 共享指针 + noDelete
15051494
{
1506-
std::unique_ptr<CompoundTag> nbt(tag);
1507-
auto* nbtObj = new NbtCompoundClass(std::move(nbt));
1508-
nbtObj->canDelete = false;
1495+
NbtCompoundClass* nbtObj = new NbtCompoundClass(std::unique_ptr<CompoundTag>(tag));
1496+
nbtObj->canDelete = false;
15091497
return nbtObj->getScriptObject();
15101498
} else return (new NbtCompoundClass(std::unique_ptr<CompoundTag>(tag)))->getScriptObject();
15111499
}
@@ -1872,88 +1860,88 @@ Local<Value> NbtStatic::newTag(const Arguments& args) {
18721860
Local<Value> res;
18731861
switch (type) {
18741862
case Tag::Type::Byte: {
1875-
ByteTag tag(0);
1863+
auto tag = std::make_unique<ByteTag>(0);
18761864
if (args.size() >= 2 && args[1].isNumber()) {
1877-
tag = ByteTag(args[1].toInt());
1865+
*tag = ByteTag(args[1].toInt());
18781866
}
1879-
res = NbtByteClass::pack(std::move(&tag));
1867+
res = NbtByteClass::pack(std::move(tag));
18801868
break;
18811869
}
18821870
case Tag::Type::Short: {
1883-
ShortTag tag(0);
1871+
auto tag = std::make_unique<ShortTag>(0);
18841872
if (args.size() >= 2 && args[1].isNumber()) {
1885-
tag.data = args[1].toInt();
1873+
tag->data = args[1].toInt();
18861874
}
1887-
res = NbtShortClass::pack(std::move(&tag));
1875+
res = NbtShortClass::pack(std::move(tag));
18881876
break;
18891877
}
18901878
case Tag::Type::Int: {
1891-
IntTag tag(0);
1879+
auto tag = std::make_unique<IntTag>(0);
18921880
if (args.size() >= 2 && args[1].isNumber()) {
1893-
tag.data = args[1].toInt();
1881+
tag->data = args[1].toInt();
18941882
}
1895-
res = NbtIntClass::pack(std::move(&tag));
1883+
res = NbtIntClass::pack(std::move(tag));
18961884
break;
18971885
}
18981886
case Tag::Type::Int64: {
1899-
Int64Tag tag(0);
1887+
auto tag = std::make_unique<Int64Tag>(0);
19001888
if (args.size() >= 2 && args[1].isNumber()) {
1901-
tag.data = args[1].asNumber().toInt64();
1889+
tag->data = args[1].asNumber().toInt64();
19021890
}
1903-
res = NbtLongClass::pack(std::move(&tag));
1891+
res = NbtLongClass::pack(std::move(tag));
19041892
break;
19051893
}
19061894
case Tag::Type::Float: {
1907-
FloatTag tag;
1895+
auto tag = std::make_unique<FloatTag>();
19081896
if (args.size() >= 2 && args[1].isNumber()) {
1909-
tag.data = args[1].asNumber().toFloat();
1897+
tag->data = args[1].asNumber().toFloat();
19101898
}
1911-
res = NbtFloatClass::pack(std::move(&tag));
1899+
res = NbtFloatClass::pack(std::move(tag));
19121900
break;
19131901
}
19141902
case Tag::Type::Double: {
1915-
DoubleTag tag;
1903+
auto tag = std::make_unique<DoubleTag>();
19161904
if (args.size() >= 2 && args[1].isNumber()) {
1917-
tag.data = args[1].asNumber().toDouble();
1905+
tag->data = args[1].asNumber().toDouble();
19181906
}
1919-
res = NbtDoubleClass::pack(std::move(&tag));
1907+
res = NbtDoubleClass::pack(std::move(tag));
19201908
break;
19211909
}
19221910
case Tag::Type::String: {
1923-
StringTag tag;
1911+
auto tag = std::make_unique<StringTag>();
19241912
if (args.size() >= 2 && args[1].isString()) {
1925-
tag = args[1].toStr();
1913+
*tag = args[1].toStr();
19261914
}
1927-
res = NbtStringClass::pack(std::move(&tag));
1915+
res = NbtStringClass::pack(std::move(tag));
19281916
break;
19291917
}
19301918
case Tag::Type::ByteArray: {
1931-
ByteArrayTag tag;
1919+
auto tag = std::make_unique<ByteArrayTag>();
19321920
if (args.size() >= 2 && args[1].isByteBuffer()) {
19331921
Local<ByteBuffer> buf = args[1].asByteBuffer();
19341922
for (char data : buf.describeUtf8()) {
1935-
tag.push_back(data);
1923+
tag->push_back(data);
19361924
}
19371925
}
1938-
res = NbtByteArrayClass::pack(std::move(&tag));
1926+
res = NbtByteArrayClass::pack(std::move(tag));
19391927
break;
19401928
}
19411929
case Tag::Type::List: {
1942-
ListTag tag;
1930+
auto tag = std::make_unique<ListTag>();
19431931
if (args.size() >= 2 && args[1].isArray()) {
19441932
Local<Array> arr = args[1].asArray();
1945-
NbtListClassAddHelper(&tag, arr);
1933+
NbtListClassAddHelper(tag.get(), arr);
19461934
}
1947-
res = NbtListClass::pack(std::move(&tag));
1935+
res = NbtListClass::pack(std::move(tag));
19481936
break;
19491937
}
19501938
case Tag::Type::Compound: {
1951-
CompoundTag tag;
1939+
auto tag = std::make_unique<CompoundTag>();
19521940
if (args.size() >= 2 && args[1].isObject()) {
19531941
Local<Object> obj = args[1].asObject();
1954-
NbtCompoundClassAddHelper(&tag, obj);
1942+
NbtCompoundClassAddHelper(tag.get(), obj);
19551943
}
1956-
res = NbtCompoundClass::pack(std::move(&tag));
1944+
res = NbtCompoundClass::pack(std::move(tag));
19571945
break;
19581946
}
19591947
case Tag::Type::End:
@@ -1972,7 +1960,7 @@ Local<Value> NbtStatic::parseSNBT(const Arguments& args) {
19721960

19731961
try {
19741962
auto tag = CompoundTag::fromSnbt(args[0].toStr());
1975-
if (tag.has_value()) return NbtCompoundClass::pack(std::move(tag->clone()));
1963+
if (tag.has_value()) return NbtCompoundClass::pack(&tag.value());
19761964
else return Local<Value>();
19771965
}
19781966
CATCH("Fail in parseSNBT!");
@@ -1985,7 +1973,7 @@ Local<Value> NbtStatic::parseBinaryNBT(const Arguments& args) {
19851973
try {
19861974
auto data = args[0].asByteBuffer();
19871975
auto tag = CompoundTag::fromBinaryNbt(std::string_view((char*)data.getRawBytes(), data.byteLength()));
1988-
if (tag.has_value()) return NbtCompoundClass::pack(std::move(tag->clone()));
1976+
if (tag.has_value()) return NbtCompoundClass::pack(&tag.value());
19891977
else return Local<Value>();
19901978
}
19911979
CATCH("Fail in parseBinaryNBT!");
@@ -2144,11 +2132,11 @@ Local<Value> Tag2Value(Tag* nbt, bool autoExpansion) {
21442132
break;
21452133
}
21462134
case Tag::Type::List:
2147-
if (!autoExpansion) value = NbtListClass::pack(nbt->as_ptr<ListTag>(), true);
2135+
if (!autoExpansion) value = NbtListClass::pack(nbt->as_ptr<ListTag>());
21482136
else value = Tag2Value_ListHelper(nbt->as_ptr<ListTag>(), autoExpansion);
21492137
break;
21502138
case Tag::Type::Compound:
2151-
if (!autoExpansion) value = NbtCompoundClass::pack(nbt->as_ptr<CompoundTag>(), true);
2139+
if (!autoExpansion) value = NbtCompoundClass::pack(nbt->as_ptr<CompoundTag>());
21522140
else value = Tag2Value_CompoundHelper(nbt->as_ptr<CompoundTag>(), autoExpansion);
21532141
break;
21542142
case Tag::Type::End:

0 commit comments

Comments
 (0)