Skip to content

Commit f356d1a

Browse files
feat!: start on large rewrite
I didn't bother with cleaning it yet
1 parent 6e3c528 commit f356d1a

43 files changed

Lines changed: 1001 additions & 422 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})

include/JavaObject/EJavaTypeCode.h

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/** @file EJavaTypeCode.h
2+
*
3+
* @author DexrnZacAttack
4+
* @date 3/23/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 for details.
10+
*/
11+
#ifndef JAVAOBJECTSTREAMS_EJAVATYPECODE_H
12+
#define JAVAOBJECTSTREAMS_EJAVATYPECODE_H
13+
14+
enum class EObjectTypeCode : signed char {
15+
TC_NULL = 0x70,
16+
TC_REFERENCE = 0x71,
17+
TC_CLASSDESC = 0x72,
18+
TC_OBJECT = 0x73,
19+
TC_STRING = 0x74,
20+
TC_ARRAY = 0x75,
21+
TC_CLASS = 0x76,
22+
TC_BLOCKDATA = 0x77,
23+
TC_ENDBLOCKDATA = 0x78,
24+
TC_RESET = 0x79,
25+
TC_BLOCKDATALONG = 0x7a,
26+
TC_EXCEPTION = 0x7B,
27+
TC_LONGSTRING = 0x7C,
28+
TC_PROXYCLASSDESC = 0x7D,
29+
TC_ENUM = 0x7E,
30+
31+
TC_BASE = TC_NULL, // lowest value
32+
TC_MAX = TC_ENUM // highest value
33+
};
34+
35+
#endif // JAVAOBJECTSTREAMS_EJAVATYPECODE_H

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
#ifndef JAVAOBJECTSTREAMS_EJAVAFIELDDESCRIPTORTYPE_H
1212
#define JAVAOBJECTSTREAMS_EJAVAFIELDDESCRIPTORTYPE_H
1313

14-
enum EJavaFieldDescriptorType : signed char {
15-
TYPE_BYTE = 'B',
16-
TYPE_CHARACTER = 'C',
17-
TYPE_DOUBLE = 'D',
18-
TYPE_FLOAT = 'F',
19-
TYPE_INT = 'I',
20-
TYPE_LONG = 'J',
21-
TYPE_OBJECT = 'L',
22-
TYPE_SHORT = 'S',
23-
TYPE_BOOLEAN = 'Z',
24-
TYPE_ARRAY = '['
14+
enum class EPrimitiveTypeCode : signed char {
15+
TYPE_BYTE = 'B',
16+
TYPE_CHARACTER = 'C',
17+
TYPE_DOUBLE = 'D',
18+
TYPE_FLOAT = 'F',
19+
TYPE_INT = 'I',
20+
TYPE_LONG = 'J',
21+
TYPE_OBJECT = 'L',
22+
TYPE_SHORT = 'S',
23+
TYPE_BOOLEAN = 'Z',
24+
TYPE_ARRAY = '['
2525
};
2626

27-
#endif // JAVAOBJECTSTREAMS_EJAVAFIELDDESCRIPTORTYPE_H
27+
#endif // JAVAOBJECTSTREAMS_EJAVAFIELDDESCRIPTORTYPE_H

include/JavaObject/JavaSerializedClassParser.h

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

include/JavaObject/io/Serializable.h

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,17 @@
1010
*/
1111
#ifndef JAVAOBJECTSTREAMS_SERIALIZABLE_H
1212
#define JAVAOBJECTSTREAMS_SERIALIZABLE_H
13-
#include "JavaObject/JavaSerializedClassParser.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+
// }
1425

15-
namespace javaobject::io {
16-
class Serializable {
17-
public:
18-
virtual ~Serializable() = default;
19-
20-
virtual SerializedClass serializeObject() = 0;
21-
22-
// todo deserialize func too I think?
23-
// 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
24-
};
25-
}
26-
27-
#endif // JAVAOBJECTSTREAMS_SERIALIZABLE_H
26+
#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

0 commit comments

Comments
 (0)