Skip to content

Commit 18239c1

Browse files
feat!: start on large rewrite
I didn't bother with cleaning it yet
1 parent d519ecc commit 18239c1

42 files changed

Lines changed: 956 additions & 303 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.clang-format

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ BreakFunctionDefinitionParameters: false
116116
BreakInheritanceList: BeforeColon
117117
BreakStringLiterals: true
118118
BreakTemplateDeclarations: MultiLine
119-
ColumnLimit: 80
119+
ColumnLimit: 150
120120
CommentPragmas: "^ IWYU pragma:"
121121
CompactNamespaces: false
122122
ConstructorInitializerIndentWidth: 4

CMakeLists.txt

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,45 @@ if (NOT TARGET bio)
1515
endif ()
1616

1717
set(FILES
18-
include/JavaObject/JavaSerializedClassParser.h
19-
src/JavaSerializedClassParser.cpp
20-
include/JavaObject/EJavaTypeCode.h
21-
include/JavaObject/EJavaFieldDescriptorType.h
18+
include/JavaObject/EObjectTypeCode.h
19+
include/JavaObject/EPrimitiveTypeCode.h
2220
src/stream/ObjectOutputStream.cpp
2321
include/JavaObject/stream/ObjectOutputStream.h
2422
src/stream/ObjectInputStream.cpp
2523
include/JavaObject/stream/ObjectInputStream.h
2624
src/io/Serializable.cpp
2725
include/JavaObject/io/Serializable.h
26+
include/JavaObject/type/TypeCodeParser.cpp
27+
include/JavaObject/type/TypeCodeParser.h
28+
include/JavaObject/type/parser/IObjectParser.cpp
29+
include/JavaObject/type/parser/IObjectParser.h
30+
include/JavaObject/type/object/IObject.cpp
31+
include/JavaObject/type/object/IObject.h
32+
include/JavaObject/type/object/NullObject.h
33+
include/JavaObject/type/parser/StringParser.cpp
34+
include/JavaObject/type/parser/StringParser.h
35+
include/JavaObject/type/object/StringObject.cpp
36+
include/JavaObject/type/object/StringObject.h
37+
include/JavaObject/type/parser/ObjectParser.cpp
38+
include/JavaObject/type/parser/ObjectParser.h
39+
include/JavaObject/type/object/Object.cpp
40+
include/JavaObject/type/object/Object.h
41+
include/JavaObject/type/parser/descriptor/ClassDescriptorParser.cpp
42+
include/JavaObject/type/parser/descriptor/ClassDescriptorParser.h
43+
include/JavaObject/type/object/descriptor/ClassDescriptorObject.cpp
44+
include/JavaObject/type/object/descriptor/ClassDescriptorObject.h
45+
include/JavaObject/type/parser/descriptor/ClassDescriptorInfoParser.cpp
46+
include/JavaObject/type/parser/descriptor/ClassDescriptorInfoParser.h
47+
include/JavaObject/type/parser/descriptor/FieldDescriptorParser.cpp
48+
include/JavaObject/type/parser/descriptor/FieldDescriptorParser.h
49+
include/JavaObject/type/object/descriptor/FieldDescriptorObject.cpp
50+
include/JavaObject/type/object/descriptor/FieldDescriptorObject.h
51+
include/JavaObject/type/object/descriptor/PrimitiveDescriptorObject.cpp
52+
include/JavaObject/type/object/descriptor/PrimitiveDescriptorObject.h
53+
include/JavaObject/type/parser/descriptor/PrimitiveDescriptorParser.cpp
54+
include/JavaObject/type/parser/descriptor/PrimitiveDescriptorParser.h
55+
include/JavaObject/util/SmartPointerCast.cpp
56+
include/JavaObject/util/SmartPointerCast.h
2857
)
2958

3059
add_library(JavaObjectStreams SHARED ${FILES})
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#ifndef JAVAOBJECTSTREAMS_EJAVATYPECODE_H
1212
#define JAVAOBJECTSTREAMS_EJAVATYPECODE_H
1313

14-
enum EJavaTypeCode : signed char {
14+
enum class EObjectTypeCode : signed char {
1515
TC_NULL = 0x70,
1616
TC_REFERENCE = 0x71,
1717
TC_CLASSDESC = 0x72,

include/JavaObject/EJavaFieldDescriptorType.h renamed to include/JavaObject/EPrimitiveTypeCode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#ifndef JAVAOBJECTSTREAMS_EJAVAFIELDDESCRIPTORTYPE_H
1212
#define JAVAOBJECTSTREAMS_EJAVAFIELDDESCRIPTORTYPE_H
1313

14-
enum EJavaFieldDescriptorType : signed char {
14+
enum class EPrimitiveTypeCode : signed char {
1515
TYPE_BYTE = 'B',
1616
TYPE_CHARACTER = 'C',
1717
TYPE_DOUBLE = 'D',

include/JavaObject/JavaSerializedClassParser.h

Lines changed: 0 additions & 70 deletions
This file was deleted.

include/JavaObject/io/Serializable.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@
1010
*/
1111
#ifndef JAVAOBJECTSTREAMS_SERIALIZABLE_H
1212
#define JAVAOBJECTSTREAMS_SERIALIZABLE_H
13-
#include "JavaObject/JavaSerializedClassParser.h"
14-
15-
namespace javaobject::io {
16-
class Serializable {
17-
public:
18-
virtual ~Serializable() = default;
19-
20-
virtual SerializedClass serializeObject() = 0;
21-
// todo deserialize func too I think?
22-
// or maybe we should be able to create a definition type (just types and names, no values) and pass that into deserializeObject with template to return correct class type
23-
};
24-
}
13+
// #include "JavaObject/JavaSerializedClassParser.h"
14+
//
15+
// namespace javaobject::io {
16+
// class Serializable {
17+
// public:
18+
// virtual ~Serializable() = default;
19+
//
20+
// virtual SerializedClass serializeObject() = 0;
21+
// // todo deserialize func too I think?
22+
// // or maybe we should be able to create a definition type (just types and names, no values) and pass that into deserializeObject with template to return correct class type
23+
// };
24+
// }
2525

2626
#endif // JAVAOBJECTSTREAMS_SERIALIZABLE_H

include/JavaObject/stream/ObjectInputStream.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
*/
1111
#ifndef JAVAOBJECTSTREAMS_OBJECTINPUTSTREAM_H
1212
#define JAVAOBJECTSTREAMS_OBJECTINPUTSTREAM_H
13+
#include "JavaObject/type/TypeCodeParser.h"
14+
#include "JavaObject/type/object/IObject.h"
15+
1316
#include <iostream>
17+
#include <memory>
1418

1519
// TODO
1620

@@ -19,10 +23,12 @@ namespace javaobject::stream {
1923
public:
2024
explicit ObjectInputStream(std::istream &input);
2125

22-
//todo
23-
// ObjectInputStream &operator>>(? value);
26+
std::unique_ptr<type::object::IObject> readObject();
2427
private:
2528
std::istream &m_input;
29+
bio::stream::BinaryInputStream m_stream;
30+
31+
type::TypeCodeParser m_parser;
2632
};
2733

2834
//some people might prefer STL naming scheme for this, so why not:
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/** @file TypeCode.cpp
2+
*
3+
* @author DexrnZacAttack
4+
* @date 3/24/26
5+
*
6+
* @device zPc-i2
7+
*/
8+
#include "TypeCodeParser.h"
9+
10+
#include "JavaObject/type/object/NullObject.h"
11+
#include "JavaObject/type/parser/ObjectParser.h"
12+
#include "JavaObject/type/parser/StringParser.h"
13+
#include "JavaObject/type/parser/descriptor/ClassDescriptorParser.h"
14+
15+
#include <istream>
16+
17+
namespace javaobject {
18+
namespace type {
19+
TypeCodeParser::TypeCodeParser(std::istream &input) : m_input(input) {
20+
this->m_parsers[EObjectTypeCode::TC_STRING] = std::make_unique<parser::StringParser>();
21+
this->m_parsers[EObjectTypeCode::TC_OBJECT] = std::make_unique<parser::ObjectParser>();
22+
this->m_parsers[EObjectTypeCode::TC_CLASSDESC] = std::make_unique<parser::descriptor::ClassDescriptorParser>();
23+
}
24+
25+
std::unique_ptr<object::IObject> TypeCodeParser::readNext() {
26+
const EObjectTypeCode tc = static_cast<EObjectTypeCode>(this->m_input.readByte());
27+
28+
const auto it = m_parsers.find(tc);
29+
if (it != this->m_parsers.end()) {
30+
return (*it->second)(*this);
31+
}
32+
33+
return std::make_unique<object::NullObject>();
34+
}
35+
36+
parser::IObjectParser *
37+
TypeCodeParser::getParser(const EObjectTypeCode typeCode) {
38+
const auto it = m_parsers.find(typeCode);
39+
if (it != this->m_parsers.end()) {
40+
return it->second.get();
41+
}
42+
43+
return nullptr;
44+
}
45+
46+
bio::stream::BinaryInputStream &TypeCodeParser::stream() {
47+
return this->m_input;
48+
}
49+
} // namespace type
50+
} // namespace javaobject
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/** @file TypeCode.h
2+
*
3+
* @author DexrnZacAttack
4+
* @date 3/24/26
5+
*
6+
* @device zPc-i2
7+
*/
8+
#ifndef JAVAOUTPUTSTREAMS_TYPECODE_H
9+
#define JAVAOUTPUTSTREAMS_TYPECODE_H
10+
#include "BinaryIO/stream/BinaryInputStream.h"
11+
#include "JavaObject/EObjectTypeCode.h"
12+
#include "JavaObject/type/parser/IObjectParser.h"
13+
14+
#include <functional>
15+
#include <iosfwd>
16+
#include <memory>
17+
#include <unordered_map>
18+
#include <variant>
19+
20+
namespace javaobject::type {
21+
class TypeCodeParser {
22+
public:
23+
TypeCodeParser(std::istream &input);
24+
25+
std::unique_ptr<object::IObject> readNext();
26+
27+
parser::IObjectParser *getParser(const EObjectTypeCode typeCode);
28+
29+
bio::stream::BinaryInputStream &stream();
30+
private:
31+
std::unordered_map<EObjectTypeCode, std::unique_ptr<parser::IObjectParser>> m_parsers;
32+
33+
bio::stream::BinaryInputStream m_input;
34+
};
35+
} // namespace javaobject::type
36+
37+
#endif // JAVAOUTPUTSTREAMS_TYPECODE_H
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/** @file IObject.cpp
2+
*
3+
* @author Dexrn ZacAttack
4+
* @date 3/24/26
5+
*
6+
* @device zPc-i2
7+
*
8+
* @copyright Copyright (c) 2026 Team Lodestone
9+
* @license This project is licensed under the MIT license, see the LICENSE file
10+
* for details.
11+
*/
12+
#include "IObject.h"
13+
14+
namespace javaobject {
15+
namespace type {
16+
namespace object {} // namespace object
17+
} // namespace type
18+
} // namespace javaobject

0 commit comments

Comments
 (0)