Skip to content

Commit

Permalink
Minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Heromyth committed Sep 10, 2020
1 parent 1437206 commit 4743f63
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 25 deletions.
21 changes: 21 additions & 0 deletions source/hunt/serialization/BinaryDeserializer.d
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,27 @@ struct BinaryDeserializer {
return res;
}

// T takeAs(T, SerializationOptions options)()
// if (!is(T == enum) && (isSigned!T || isBoolean!T || is(T == char) || isFloatingPoint!T)) {
// T r;
// // T* val = &r;

// // ubyte val0 = (val >> 24);
// // ubyte val1 = cast(ubyte)(val >> 16);
// // ubyte val2 = cast(ubyte)(val >> 8);
// // ubyte val3 = val & 0xff;
// // putUbyte(val0);
// // putUbyte(val1);
// // putUbyte(val2);
// // putUbyte(val3);
// // val = (val0 << 24) + (val1 << 16) + (val2 << 8) + val3;
// return r;
// }

// T takeAs(T, SerializationOptions options)() {
// return T.init;
// }

bool isNullObj() {
return _buffer[0 .. 4] == NULL ? true : false;
}
Expand Down
52 changes: 27 additions & 25 deletions source/hunt/serialization/Specify.d
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ void specify(SerializationOptions options, C, T : E[], E)(auto ref C obj, ref T
void specify(SerializationOptions options, C, T)(auto ref C obj, ref T val)
if (isAggregateType!T && !isInputRange!T && !isOutputRange!(T, ubyte)) {

version(HUNT_DEBUG_MORE) tracef("Setting: %s, value: %s", T.stringof, val);
debug(HUNT_DEBUG_MORE) tracef("Setting: %s, value: %s", T.stringof, val);
loopMembers!(options, C, T)(obj, val);
}

Expand Down Expand Up @@ -197,7 +197,7 @@ void loopMembers(SerializationOptions options, C, T)(auto ref C obj, ref T val)

void loopMembers(SerializationOptions options, C, T)(auto ref C obj, ref T val) if (is(T == class)) {

version(HUNT_DEBUG_MORE) tracef("Setting: %s, value: %s", T.stringof, val);
debug(HUNT_DEBUG_MORE) tracef("Setting: %s, value: %s", T.stringof, val);

static if (is(C == BinarySerializer)) {
if (val is null) {
Expand Down Expand Up @@ -259,35 +259,37 @@ void loopMembersImpl(T, SerializationOptions options, C, VT)
}

static if(canDeserialize) {
specifyAggregateMember!(member, options)(obj, val);
debug(HUNT_DEBUG_MORE) tracef("name: %s", member);
specify!(options)(obj, __traits(getMember, val, member));
debug(HUNT_DEBUG_MORE) infof("value: %s", __traits(getMember, val, member));
}
}}
}
}


void specifyAggregateMember(string member, SerializationOptions options, C, T)(auto ref C obj, ref T val) {
import std.meta : staticIndexOf;

enum NoCereal;
enum noCerealIndex = staticIndexOf!(NoCereal, __traits(getAttributes,
__traits(getMember, val, member)));
static if (noCerealIndex == -1) {
specifyMember!(member, options)(obj, val);
}
}

void specifyMember(string member, SerializationOptions options, C, T)(auto ref C obj, ref T val) {
// alias currentMember = __traits(getMember, val, member);
// static if(isAggregateType!(typeof(currentMember))) {
// specify!(options)(obj, __traits(getMember, val, member));
// } else {
// specify(obj, __traits(getMember, val, member));
// }
version(HUNT_DEBUG_MORE) tracef("name: %s", member);
specify!(options)(obj, __traits(getMember, val, member));
version(HUNT_DEBUG_MORE) infof("value: %s", __traits(getMember, val, member));
}
// void specifyAggregateMember(string member, SerializationOptions options, C, T)(auto ref C obj, ref T val) {
// import std.meta : staticIndexOf;

// enum NoCereal;
// enum noCerealIndex = staticIndexOf!(NoCereal, __traits(getAttributes,
// __traits(getMember, val, member)));
// static if (noCerealIndex == -1) {
// specifyMember!(member, options)(obj, val);
// }
// }

// void specifyMember(string member, SerializationOptions options, C, T)(auto ref C obj, ref T val) {
// // alias currentMember = __traits(getMember, val, member);
// // static if(isAggregateType!(typeof(currentMember))) {
// // specify!(options)(obj, __traits(getMember, val, member));
// // } else {
// // specify(obj, __traits(getMember, val, member));
// // }
// debug(HUNT_DEBUG_MORE) tracef("name: %s", member);
// specify!(options)(obj, __traits(getMember, val, member));
// debug(HUNT_DEBUG_MORE) infof("value: %s", __traits(getMember, val, member));
// }

void specifyBaseClass(SerializationOptions options, C, T)(auto ref C obj, ref T val) if (is(T == class)) {
foreach (base; BaseTypeTuple!T) {
Expand Down

0 comments on commit 4743f63

Please sign in to comment.