Skip to content

Commit 3d10024

Browse files
feat: some api additions, update tests, add zero test proj
1 parent d779337 commit 3d10024

File tree

19 files changed

+266
-15
lines changed

19 files changed

+266
-15
lines changed

.clang-tidy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ CheckOptions:
3232
readability-identifier-naming.GlobalVariablePrefix: g_
3333
# locals
3434
readability-identifier-naming.LocalVariableCase: camelBack
35+
readability-identifier-naming.VariableCase: camelBack
3536
# params
3637
readability-identifier-naming.ParameterCase: camelBack
3738
# template params

CMakeLists.txt

Lines changed: 9 additions & 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.3.5)
2+
project(JavaObjectStreams VERSION 1.3.6)
33

44
set(CMAKE_CXX_STANDARD 20)
55

@@ -160,6 +160,14 @@ endif ()
160160

161161
unset(JAVAOBJECTSTREAMS_BUILD_TESTS CACHE)
162162

163+
option(JAVAOBJECTSTREAMS_BUILD_JOBJDUMP "Build JavaObjectDump" ON)
164+
165+
if (JAVAOBJECTSTREAMS_BUILD_JOBJDUMP)
166+
add_subdirectory(util/JavaObjectDump)
167+
endif ()
168+
169+
unset(JAVAOBJECTSTREAMS_BUILD_JOBJDUMP CACHE)
170+
163171
option(JAVAOBJECTSTREAMS_DOCS_TARGET "Create documentation target" ON)
164172

165173
if (JAVAOBJECTSTREAMS_DOCS_TARGET STREQUAL "ON")

include/JavaObject/stream/ObjectInputStream.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
#define JAVAOBJECTSTREAMS_OBJECTINPUTSTREAM_H
1313
#include "JavaObject/type/object/ObjectTypeCodeParser.h"
1414
#include "JavaObject/type/object/types/IObject.h"
15+
#include "JavaObject/type/object/types/StringObject.h"
16+
#include "JavaObject/type/primitive/types/PrimitiveBooleanObject.h"
17+
#include "JavaObject/type/primitive/types/PrimitiveByteObject.h"
18+
#include "JavaObject/type/primitive/types/PrimitiveDoubleObject.h"
19+
#include "JavaObject/type/primitive/types/PrimitiveFloatObject.h"
20+
#include "JavaObject/type/primitive/types/PrimitiveIntegerObject.h"
21+
#include "JavaObject/type/primitive/types/PrimitiveLongObject.h"
22+
#include "JavaObject/type/primitive/types/PrimitiveShortObject.h"
1523

1624
#include <iostream>
1725
#include <memory>
@@ -23,7 +31,17 @@ namespace javaobject::stream {
2331
public:
2432
explicit ObjectInputStream(std::istream &input);
2533

26-
std::shared_ptr<type::object::IObject> readObject();
34+
std::shared_ptr<type::object::IObject> readObject() const;
35+
36+
// TODO seemingly these objects are all written into a BlockData section, ugh!
37+
std::shared_ptr<type::primitive::types::PrimitiveBooleanObject> readBool() const = delete;
38+
std::shared_ptr<type::primitive::types::PrimitiveByteObject> readByte() const = delete;
39+
std::shared_ptr<type::primitive::types::PrimitiveShortObject> readShort() const = delete;
40+
std::shared_ptr<type::primitive::types::PrimitiveIntegerObject> readInt() const = delete;
41+
std::shared_ptr<type::primitive::types::PrimitiveLongObject> readLong() const = delete;
42+
std::shared_ptr<type::primitive::types::PrimitiveFloatObject> readFloat() const = delete;
43+
std::shared_ptr<type::primitive::types::PrimitiveDoubleObject> readDouble() const = delete;
44+
2745

2846
ObjectInputStream &operator>>(std::shared_ptr<type::object::IObject> &object);
2947
private:

include/JavaObject/stream/ObjectOutputStream.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,25 @@
1010
*/
1111
#ifndef JAVAOBJECTSTREAMS_OBJECTOUTPUTSTREAM_H
1212
#define JAVAOBJECTSTREAMS_OBJECTOUTPUTSTREAM_H
13+
#include "JavaObject/type/object/types/IObject.h"
14+
15+
#include <cstdint>
16+
#include <memory>
17+
#include <string>
1318

1419
// TODO
1520

1621
namespace javaobject::stream {
1722
class ObjectOutputStream {
23+
void writeObject(std::shared_ptr<type::object::IObject> obj);
24+
void writeBool(bool b);
25+
void writeByte(std::int8_t b);
26+
void writeShort(std::int16_t s);
27+
void writeInt(std::int32_t i);
28+
void writeLong(std::int64_t l);
29+
void writeFloat(float f);
30+
void writeDouble(double d);
31+
void writeString(const std::string &s);
1832
};
1933

2034
using oobjectstream = ObjectOutputStream;

include/JavaObject/type/ITypeCodeParser.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ namespace javaobject::type {
2323

2424
virtual std::shared_ptr<ObjectT> readNext() = 0;
2525
virtual std::shared_ptr<ObjectT> readUsingParser(const ParserT &parser) = 0;
26-
26+
virtual std::shared_ptr<ObjectT> readUsingTypeCode(const TypeCodeT &typecode) = 0;
27+
2728
template <typename T>
2829
requires std::is_base_of_v<ObjectT, T>
2930
std::shared_ptr<T> readNextAs() {

include/JavaObject/type/object/ObjectTypeCodeParser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace javaobject::type::object {
2828

2929
std::shared_ptr<object::IObject> readNext() override;
3030
std::shared_ptr<object::IObject> readUsingParser(const object::parsers::IObjectParser &parser) override;
31+
std::shared_ptr<IObject> readUsingTypeCode(const EObjectTypeCode &typecode) override;
3132
};
3233
} // namespace javaobject::type
3334

include/JavaObject/type/object/types/ClassDataObject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ namespace javaobject::type::object
3838

3939
std::string toString() override;
4040

41+
std::shared_ptr<primitive::types::IPrimitiveObject> getFieldValue(const std::string &fieldName);
42+
4143
std::unordered_map<std::string, std::shared_ptr<primitive::types::IPrimitiveObject>> values;
4244
};
4345

include/JavaObject/type/object/types/IObject.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,34 @@
1212
#ifndef JAVAOBJECTSTREAMS_IOBJECT_H
1313
#define JAVAOBJECTSTREAMS_IOBJECT_H
1414

15+
#include <memory>
1516
#include <string>
17+
#include <typeinfo>
1618

1719
namespace javaobject::type::object {
1820
class IObject {
1921
public:
2022
virtual ~IObject() = default;
2123

2224
virtual std::string toString();
25+
26+
template <typename T>
27+
requires std::is_base_of_v<IObject, T>
28+
constexpr bool instanceOf() {
29+
return typeid(*this) == typeid(T);
30+
}
31+
32+
template <typename T>
33+
requires std::is_base_of_v<IObject, T>
34+
bool instanceOf(std::shared_ptr<T> object) {
35+
return typeid(*this) == typeid(*object);
36+
}
37+
38+
template <typename T>
39+
requires std::is_base_of_v<IObject, T>
40+
T *as() {
41+
return dynamic_cast<T *>(this);
42+
}
2343
};
2444
} // namespace javaobject::type::object
2545

include/JavaObject/type/primitive/PrimitiveTypeCodeParser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace javaobject::type::primitive {
3333

3434
std::shared_ptr<types::IPrimitiveObject> readNext() override;
3535
std::shared_ptr<types::IPrimitiveObject> readUsingParser(const parsers::IPrimitiveObjectParser &parser) override;
36+
std::shared_ptr<types::IPrimitiveObject> readUsingTypeCode(const EPrimitiveTypeCode &typecode) override;
3637
};
3738
} // namespace javaobject::type::primitive
3839

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@ namespace javaobject::type::primitive::types {
3131
struct IPrimitiveTypeObject : IPrimitiveObject {
3232
explicit IPrimitiveTypeObject(T value) : value(value) {}
3333

34-
operator T() {
34+
T unwrap() {
3535
return value;
3636
}
3737

38+
operator T() {
39+
return unwrap();
40+
}
41+
3842
T value;
3943
};
4044
} // namespace javaobject::type::primitive::types

0 commit comments

Comments
 (0)