chaokunyang commented on code in PR #1313:
URL: https://github.com/apache/incubator-fury/pull/1313#discussion_r1443784881
##########
javascript/packages/fury/lib/classResolver.ts:
##########
@@ -17,87 +17,102 @@
* under the License.
*/
-import { arraySerializer, stringArraySerializer, boolArraySerializer,
shortArraySerializer, intArraySerializer, longArraySerializer,
floatArraySerializer, doubleArraySerializer } from "./internalSerializer/array";
-import stringSerializer from "./internalSerializer/string";
-import binarySerializer from "./internalSerializer/binary";
-import { dateSerializer, timestampSerializer } from
"./internalSerializer/datetime";
-import mapSerializer from "./internalSerializer/map";
-import setSerializer from "./internalSerializer/set";
-import boolSerializer from "./internalSerializer/bool";
-import { uInt16Serializer, int16Serializer, int32Serializer, uInt32Serializer,
uInt64Serializer, floatSerializer, doubleSerializer, uInt8Serializer,
int64Serializer, int8Serializer } from "./internalSerializer/number";
import { InternalSerializerType, Serializer, Fury, BinaryReader, BinaryWriter
as TBinaryWriter } from "./type";
-import anySerializer from "./internalSerializer/any";
+import anySerializer from "./any";
import { fromString } from "./platformBuffer";
import { x64hash128 } from "./murmurHash3";
import { BinaryWriter } from "./writer";
+import { generateSerializer } from "./gen";
+import { Type, TypeDescription } from "./description";
const USESTRINGVALUE = 0;
const USESTRINGID = 1;
-class Lazystring {
+class LazyString {
private string: string | null = null;
private start: number | null = null;
private len: number | null = null;
static fromPair(start: number, len: number) {
- const result = new Lazystring();
+ const result = new LazyString();
result.start = start;
result.len = len;
return result;
}
static fromString(str: string) {
- const result = new Lazystring();
+ const result = new LazyString();
result.string = str;
return result;
}
toString(binaryReader: BinaryReader) {
if (this.string == null) {
- const str = binaryReader.stringUtf8At(this.start!, this.len!);
- return str;
+ this.string = binaryReader.stringUtf8At(this.start!, this.len!);
}
return this.string;
}
}
+const uninitSerialize = {
+ read: () => {
+ throw new Error("uninitSerialize");
+ },
+ write: () => {
+ throw new Error("uninitSerialize");
+ },
+ readInner: () => {
+ throw new Error("uninitSerialize");
+ },
+ writeInner: () => {
+ throw new Error("uninitSerialize");
+ },
+ meta: {
+ fixedSize: 0,
+ noneable: false,
+ },
+};
+
export default class SerializerResolver {
private internalSerializer: Serializer[] = new Array(300);
private customSerializer: { [key: string]: Serializer } = {
};
- private readStringPool: Lazystring[] = [];
+ private readStringPool: LazyString[] = [];
private writeStringCount = 0;
private writeStringIndex: number[] = [];
+ private regSerializer(fury: Fury, description: TypeDescription) {
+ return fury.classResolver.registerSerializerById(description.type,
generateSerializer(fury, description));
+ }
+
private initInternalSerializer(fury: Fury) {
- const _anySerializer = anySerializer(fury);
- this.internalSerializer[InternalSerializerType.ANY] = _anySerializer;
- this.internalSerializer[InternalSerializerType.STRING] =
stringSerializer(fury);
- this.internalSerializer[InternalSerializerType.ARRAY] =
arraySerializer(fury, _anySerializer);
- this.internalSerializer[InternalSerializerType.MAP] = mapSerializer(fury,
_anySerializer, _anySerializer);
- this.internalSerializer[InternalSerializerType.BOOL] =
boolSerializer(fury);
- this.internalSerializer[InternalSerializerType.UINT8] =
uInt8Serializer(fury);
- this.internalSerializer[InternalSerializerType.INT8] =
int8Serializer(fury);
- this.internalSerializer[InternalSerializerType.UINT16] =
uInt16Serializer(fury);
- this.internalSerializer[InternalSerializerType.INT16] =
int16Serializer(fury);
- this.internalSerializer[InternalSerializerType.UINT32] =
uInt32Serializer(fury);
- this.internalSerializer[InternalSerializerType.INT32] =
int32Serializer(fury);
- this.internalSerializer[InternalSerializerType.UINT64] =
uInt64Serializer(fury);
- this.internalSerializer[InternalSerializerType.INT64] =
int64Serializer(fury);
- this.internalSerializer[InternalSerializerType.FLOAT] =
floatSerializer(fury);
- this.internalSerializer[InternalSerializerType.DOUBLE] =
doubleSerializer(fury);
- this.internalSerializer[InternalSerializerType.TIMESTAMP] =
timestampSerializer(fury);
- this.internalSerializer[InternalSerializerType.DATE] =
dateSerializer(fury);
- this.internalSerializer[InternalSerializerType.FURY_SET] =
setSerializer(fury, anySerializer(fury));
- this.internalSerializer[InternalSerializerType.FURY_STRING_ARRAY] =
stringArraySerializer(fury);
- this.internalSerializer[InternalSerializerType.FURY_PRIMITIVE_BOOL_ARRAY]
= boolArraySerializer(fury);
- this.internalSerializer[InternalSerializerType.FURY_PRIMITIVE_SHORT_ARRAY]
= shortArraySerializer(fury);
- this.internalSerializer[InternalSerializerType.FURY_PRIMITIVE_INT_ARRAY] =
intArraySerializer(fury);
- this.internalSerializer[InternalSerializerType.FURY_PRIMITIVE_LONG_ARRAY]
= longArraySerializer(fury);
- this.internalSerializer[InternalSerializerType.FURY_PRIMITIVE_FLOAT_ARRAY]
= floatArraySerializer(fury);
-
this.internalSerializer[InternalSerializerType.FURY_PRIMITIVE_DOUBLE_ARRAY] =
doubleArraySerializer(fury);
- this.internalSerializer[InternalSerializerType.BINARY] =
binarySerializer(fury);
+ this.internalSerializer[InternalSerializerType.ANY] = anySerializer(fury);
+ this.regSerializer(fury, Type.string());
Review Comment:
Why not name it as `registerSerializer`, `regSerializer` seems a little
vague.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]