Skip to content

Commit 1d205f0

Browse files
chore: commit rest of files
Co-authored-by: Dexrn ZacAttack <me@dexrn.me>
1 parent e2e0488 commit 1d205f0

File tree

10 files changed

+50
-26
lines changed

10 files changed

+50
-26
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION VERSION 3.30)
2-
project(JavaObjectStreams VERSION 1.2.0)
2+
project(JavaObjectStreams VERSION 1.2.1)
33

44
set(CMAKE_CXX_STANDARD 20)
55

include/JavaObject/stream/ObjectInputStream.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace javaobject::stream {
3030
std::istream &m_input;
3131
bio::stream::BinaryInputStream m_stream;
3232

33-
type::object::ObjectTypeCodeParser m_parser;
33+
type::TypeCodeParserStorage m_parsers;
3434
};
3535

3636
//some people might prefer STL naming scheme for this, so why not:

include/JavaObject/type/ITypeCodeParser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace javaobject::type {
3535
std::shared_ptr<T> readAsUsingParser(const ParserT &parser) {
3636
return std::static_pointer_cast<T>(this->readUsingParser(parser));
3737
}
38-
38+
3939
ParserT *getParser(const TypeCodeT typeCode) {
4040
if (const auto it = m_parsers.find(typeCode); it != this->m_parsers.end()) {
4141
return it->second.get();

include/JavaObject/type/object/ObjectTypeCodeParser.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include "JavaObject/type/ITypeCodeParser.h"
1414
#include "JavaObject/type/object/parsers/IObjectParser.h"
1515
#include "JavaObject/type/object/parsers/ReferenceParser.h"
16-
#include "JavaObject/type/primitive/PrimitiveTypeCodeParser.h"
1716
#include "JavaObject/util/SmartPointerCast.h"
1817
#include "types/ReferenceObject.h"
1918

@@ -23,22 +22,19 @@
2322
#include <unordered_map>
2423
#include <variant>
2524

25+
#include "JavaObject/type/ITypeCodeStorageHolder.h"
26+
2627
namespace javaobject::type::primitive {
2728
class PrimitiveTypeCodeParser;
2829
}
2930

3031
namespace javaobject::type::object {
31-
class ObjectTypeCodeParser : public ITypeCodeParser<IObject, parsers::IObjectParser, EObjectTypeCode> {
32+
class ObjectTypeCodeParser : public ITypeCodeParser<IObject, parsers::IObjectParser, EObjectTypeCode>, public ITypeCodeStorageHolder {
3233
public:
33-
explicit ObjectTypeCodeParser(std::istream &input, HandleContainer &handleContainer);
34+
explicit ObjectTypeCodeParser(std::istream &input, HandleContainer &handleContainer, TypeCodeParserStorage &parserStorage);
3435

3536
std::shared_ptr<object::IObject> readNext() override;
3637
std::shared_ptr<object::IObject> readUsingParser(const object::parsers::IObjectParser &parser) override;
37-
38-
primitive::PrimitiveTypeCodeParser &primitiveTypeCodeParser();
39-
40-
private:
41-
primitive::PrimitiveTypeCodeParser m_primitiveParser;
4238
};
4339
} // namespace javaobject::type
4440

include/JavaObject/type/primitive/PrimitiveTypeCodeParser.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,19 @@
1717
#include "JavaObject/type/primitive/parsers/IPrimitiveObjectParser.h"
1818
#include "JavaObject/type/primitive/types/IPrimitiveObject.h"
1919

20+
#include <memory>
21+
22+
#include "JavaObject/type/ITypeCodeStorageHolder.h"
23+
#include "JavaObject/type/TypeCodeParserStorage.h"
24+
25+
namespace javaobject::type::object {
26+
class ObjectTypeCodeParser;
27+
}
28+
2029
namespace javaobject::type::primitive {
21-
class PrimitiveTypeCodeParser : public ITypeCodeParser<types::IPrimitiveObject, parsers::IPrimitiveObjectParser, EPrimitiveTypeCode> {
30+
class PrimitiveTypeCodeParser : public ITypeCodeParser<types::IPrimitiveObject, parsers::IPrimitiveObjectParser, EPrimitiveTypeCode>, public ITypeCodeStorageHolder {
2231
public:
23-
explicit PrimitiveTypeCodeParser(std::istream &input, HandleContainer &handleContainer);
32+
PrimitiveTypeCodeParser(std::istream &input, HandleContainer &handleContainer, TypeCodeParserStorage &parserStorage);
2433

2534
std::shared_ptr<types::IPrimitiveObject> readNext() override;
2635
std::shared_ptr<types::IPrimitiveObject> readUsingParser(const parsers::IPrimitiveObjectParser &parser) override;

include/JavaObject/type/primitive/types/PrimitiveJavaObject.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
*/
1111
#ifndef JAVAOBJECTSTREAMS_PRIMITIVEJAVAOBJECT_H
1212
#define JAVAOBJECTSTREAMS_PRIMITIVEJAVAOBJECT_H
13+
#include "JavaObject/type/object/types/IObject.h"
1314
#include "JavaObject/type/primitive/types/IPrimitiveObject.h"
15+
#include <memory>
1416

1517
namespace javaobject::type::primitive::types {
16-
struct PrimitiveJavaObject : IPrimitiveObject {
18+
struct PrimitiveJavaObject : IPrimitiveTypeObject<std::shared_ptr<object::IObject>> {
19+
explicit PrimitiveJavaObject(const std::shared_ptr<object::IObject> &obj) : IPrimitiveTypeObject(obj) {}
20+
1721
EPrimitiveTypeCode typeCode() override;
1822
};
1923
} // namespace javaobject::type::primitive::types

src/stream/ObjectInputStream.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
#include "JavaObject/stream/ObjectInputStream.h"
1212

1313
#include "JavaObject/type/object/types/NullObject.h"
14+
#include "JavaObject/type/primitive/PrimitiveTypeCodeParser.h"
1415

1516
namespace javaobject::stream {
16-
ObjectInputStream::ObjectInputStream(std::istream &input) : m_handleContainer(), m_input(input), m_stream(input), m_parser(input, m_handleContainer) {
17+
ObjectInputStream::ObjectInputStream(std::istream &input) : m_handleContainer(), m_input(input), m_stream(input) {
18+
this->m_parsers.objectParser = std::make_shared<type::object::ObjectTypeCodeParser>(input, m_handleContainer, m_parsers);
19+
this->m_parsers.primitiveParser = std::make_shared<type::primitive::PrimitiveTypeCodeParser>(input, m_handleContainer, m_parsers);
1720
}
1821

1922
std::shared_ptr<type::object::IObject> ObjectInputStream::readObject() {
@@ -24,6 +27,6 @@ namespace javaobject::stream {
2427

2528
int16_t count = this->m_stream.readBE<uint16_t>();
2629

27-
return this->m_parser.readNext();
30+
return this->m_parsers.objectParser->readNext();
2831
}
2932
} // namespace javaobject::stream

src/type/object/ObjectTypeCodeParser.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* @device zPc-i2
77
*/
88
#include "JavaObject/type/object/ObjectTypeCodeParser.h"
9+
#include "JavaObject/type/primitive/PrimitiveTypeCodeParser.h"
910

1011
#include "JavaObject/type/object/types/NullObject.h"
1112
#include "JavaObject/type/object/parsers/ObjectParser.h"
@@ -17,7 +18,7 @@
1718
#include <istream>
1819

1920
namespace javaobject::type::object {
20-
ObjectTypeCodeParser::ObjectTypeCodeParser(std::istream &input, HandleContainer &handleContainer) : ITypeCodeParser(input, handleContainer), m_primitiveParser(input, handleContainer) {
21+
ObjectTypeCodeParser::ObjectTypeCodeParser(std::istream &input, HandleContainer &handleContainer, TypeCodeParserStorage &parserStorage) : ITypeCodeParser(input, handleContainer), ITypeCodeStorageHolder(parserStorage) {
2122
this->m_parsers[EObjectTypeCode::TC_STRING] = std::make_unique<object::parsers::StringParser>();
2223
this->m_parsers[EObjectTypeCode::TC_OBJECT] = std::make_unique<object::parsers::ObjectParser>();
2324
this->m_parsers[EObjectTypeCode::TC_CLASSDESC] = std::make_unique<object::parsers::descriptor::ClassDescriptorParser>();
@@ -34,8 +35,7 @@ namespace javaobject::type::object {
3435
return std::make_shared<object::NullObject>();
3536
}
3637

37-
std::shared_ptr<object::IObject> ObjectTypeCodeParser::readUsingParser(const object::parsers::IObjectParser &parser) { return parser(*this); }
38-
primitive::PrimitiveTypeCodeParser &ObjectTypeCodeParser::primitiveTypeCodeParser() {
39-
return this->m_primitiveParser;
38+
std::shared_ptr<object::IObject> ObjectTypeCodeParser::readUsingParser(const object::parsers::IObjectParser &parser) {
39+
return parser(*this);
4040
}
4141
} // namespace javaobject::type

src/type/object/parsers/ClassDataParser.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
#include <assert.h>
1818

19+
#include "JavaObject/type/primitive/PrimitiveTypeCodeParser.h"
20+
1921
namespace javaobject::type::object::parsers {
2022
ClassDataParser::ClassDataParser(const std::shared_ptr<object::descriptor::ClassDescriptorInfoObject> &classDescInfo) : m_classDescInfo(classDescInfo) {
2123
// this->m_parsers = {{
@@ -46,11 +48,15 @@ namespace javaobject::type::object::parsers {
4648
std::shared_ptr<object::SerializableClassDataObject> ClassDataParser::parseSerializableClassData(type::object::ObjectTypeCodeParser &parser) const {
4749
auto d = std::make_shared<object::SerializableClassDataObject>();
4850

51+
auto primitiveParser = parser.parserStorage().primitiveParser;
52+
4953
// BUG WORKAROUND, REMOVE AFTER WE FIND THE FIX
5054
parser.stream().seekRelative(-2);
5155
for (auto &[name, value] : this->m_classDescInfo->fields) {
5256
const auto typeCode = value->primitiveDescriptor->typeCode;
53-
std::shared_ptr<primitive::types::IPrimitiveObject> obj = (*parser.primitiveTypeCodeParser().getParser(typeCode))(parser.primitiveTypeCodeParser());
57+
58+
//todo check this out since I can't easily see whats going on when using codewithme
59+
std::shared_ptr<primitive::types::IPrimitiveObject> obj = primitiveParser->readUsingParser(*primitiveParser->getParser(typeCode));
5460

5561
d->values.emplace(name, obj);
5662
}

src/type/primitive/PrimitiveTypeCodeParser.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,20 @@
1010
*/
1111
#include "JavaObject/type/primitive/PrimitiveTypeCodeParser.h"
1212

13+
#include "JavaObject/type/object/ObjectTypeCodeParser.h"
1314
#include "JavaObject/type/primitive/parsers/PrimitiveBooleanObjectParser.h"
1415
#include "JavaObject/type/primitive/parsers/PrimitiveByteObjectParser.h"
1516
#include "JavaObject/type/primitive/parsers/PrimitiveCharObjectParser.h"
1617
#include "JavaObject/type/primitive/parsers/PrimitiveDoubleObjectParser.h"
1718
#include "JavaObject/type/primitive/parsers/PrimitiveFloatObjectParser.h"
1819
#include "JavaObject/type/primitive/parsers/PrimitiveIntegerObjectParser.h"
20+
#include "JavaObject/type/primitive/parsers/PrimitiveJavaObjectParser.h"
1921
#include "JavaObject/type/primitive/parsers/PrimitiveLongObjectParser.h"
2022
#include "JavaObject/type/primitive/parsers/PrimitiveShortObjectParser.h"
2123

2224
namespace javaobject::type::primitive {
23-
PrimitiveTypeCodeParser::PrimitiveTypeCodeParser(std::istream &input, HandleContainer &handleContainer) : ITypeCodeParser(input, handleContainer) {
25+
PrimitiveTypeCodeParser::PrimitiveTypeCodeParser(std::istream &input, HandleContainer &handleContainer,
26+
TypeCodeParserStorage &parserStorage) : ITypeCodeParser(input, handleContainer), ITypeCodeStorageHolder(parserStorage) {
2427
this->m_parsers[EPrimitiveTypeCode::TYPE_BOOLEAN] = std::make_unique<parsers::PrimitiveBooleanObjectParser>();
2528
this->m_parsers[EPrimitiveTypeCode::TYPE_BYTE] = std::make_unique<parsers::PrimitiveByteObjectParser>();
2629
this->m_parsers[EPrimitiveTypeCode::TYPE_CHARACTER] = std::make_unique<parsers::PrimitiveCharObjectParser>();
@@ -30,8 +33,7 @@ namespace javaobject::type::primitive {
3033
this->m_parsers[EPrimitiveTypeCode::TYPE_LONG] = std::make_unique<parsers::PrimitiveLongObjectParser>();
3134
this->m_parsers[EPrimitiveTypeCode::TYPE_SHORT] = std::make_unique<parsers::PrimitiveShortObjectParser>();
3235
// this->m_parsers[EPrimitiveTypeCode::TYPE_ARRAY] = std::make_unique<parsers::PrimitiveByteObjectParser>();
33-
// this->m_parsers[EPrimitiveTypeCode::TYPE_OBJECT] = std::make_unique<parsers::PrimitiveByteObjectParser>();
34-
36+
this->m_parsers[EPrimitiveTypeCode::TYPE_OBJECT] = std::make_unique<parsers::PrimitiveJavaObjectParser>();
3537
}
3638

3739
std::shared_ptr<types::IPrimitiveObject> PrimitiveTypeCodeParser::readNext() {
@@ -44,5 +46,9 @@ namespace javaobject::type::primitive {
4446
// return std::make_shared<object::NullObject>();
4547
throw std::runtime_error("Couldn't find parser for primitive typecode");
4648
}
47-
std::shared_ptr<types::IPrimitiveObject> PrimitiveTypeCodeParser::readUsingParser(const parsers::IPrimitiveObjectParser &parser) { return parser(*this); }
48-
} // namespace javaobject::type::primitive
49+
50+
std::shared_ptr<types::IPrimitiveObject> PrimitiveTypeCodeParser::readUsingParser(
51+
const parsers::IPrimitiveObjectParser &parser) {
52+
return parser(*this);
53+
}
54+
} // namespace javaobject::type::primitive

0 commit comments

Comments
 (0)