Skip to content

Commit 53a418c

Browse files
committed
fix: faster variant from and to
1 parent 33bfab2 commit 53a418c

File tree

2 files changed

+8
-114
lines changed

2 files changed

+8
-114
lines changed

src/utils/index.android.ts

Lines changed: 3 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -14,65 +14,13 @@ export function nativeVectorToArray(nVector: com.carto.core.StringVector) {
1414
}
1515

1616
export function nativeVariantToJS(variant: com.carto.core.Variant) {
17-
switch (variant.getType()) {
18-
case com.carto.core.VariantType.VARIANT_TYPE_ARRAY: {
19-
const result = [];
20-
for (let index = 0; index < variant.getArraySize(); index++) {
21-
result[index] = nativeVariantToJS(variant.getArrayElement(index));
22-
}
23-
return result;
24-
}
25-
case com.carto.core.VariantType.VARIANT_TYPE_STRING:
26-
return variant.getString();
27-
case com.carto.core.VariantType.VARIANT_TYPE_BOOL:
28-
return variant.getBool();
29-
case com.carto.core.VariantType.VARIANT_TYPE_DOUBLE:
30-
return variant.getDouble();
31-
case com.carto.core.VariantType.VARIANT_TYPE_INTEGER:
32-
return variant.getLong();
33-
case com.carto.core.VariantType.VARIANT_TYPE_OBJECT:
34-
const result = {};
35-
const keys = variant.getObjectKeys();
36-
let key;
37-
for (let index = 0; index < keys.size(); index++) {
38-
key = keys.get(index);
39-
result[key] = nativeVariantToJS(variant.getObjectElement(key));
40-
}
41-
return result;
42-
}
43-
return undefined;
17+
return JSON.parse(variant.toString());
4418
}
4519
export function JSVariantToNative(variant: any) {
4620
if (Array.isArray(variant)) {
47-
const builder = new com.carto.core.VariantArrayBuilder();
48-
for (let index = 0; index < variant.length; index++) {
49-
const obj = variant[index];
50-
if (typeof obj === 'boolean') {
51-
builder.addBool(obj);
52-
} else if (typeof obj === 'number') {
53-
builder.addDouble(obj);
54-
} else if (typeof obj === 'string') {
55-
builder.addString(obj);
56-
} else {
57-
builder.addVariant(JSVariantToNative(obj));
58-
}
59-
}
60-
return builder.buildVariant();
21+
return com.carto.core.Variant.fromString(JSON.stringify(variant));
6122
} else if (typeof variant === 'object') {
62-
const builder = new com.carto.core.VariantObjectBuilder();
63-
Object.keys(variant).forEach((k) => {
64-
const obj = variant[k];
65-
if (typeof obj === 'boolean') {
66-
builder.setBool(k, obj);
67-
} else if (typeof obj === 'number') {
68-
builder.setDouble(k, obj);
69-
} else if (typeof obj === 'string') {
70-
builder.setString(k, obj);
71-
} else {
72-
builder.setVariant(k, JSVariantToNative(obj));
73-
}
74-
});
75-
return builder.buildVariant();
23+
return com.carto.core.Variant.fromString(JSON.stringify(variant));
7624
} else if (variant) {
7725
return new com.carto.core.Variant(variant);
7826
}

src/utils/index.ios.ts

Lines changed: 5 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -12,76 +12,22 @@ export function nativeVectorToArray(nVector: NTStringVector) {
1212
}
1313

1414
export function nativeVariantToJS(variant: NTVariant) {
15-
switch (variant.getType()) {
16-
case NTVariantType.T_VARIANT_TYPE_ARRAY: {
17-
const result = [];
18-
for (let index = 0; index < variant.getArraySize(); index++) {
19-
result[index] = nativeVariantToJS(variant.getArrayElement(index));
20-
}
21-
return result;
22-
}
23-
case NTVariantType.T_VARIANT_TYPE_BOOL:
24-
return variant.getBool();
25-
case NTVariantType.T_VARIANT_TYPE_DOUBLE:
26-
return variant.getDouble();
27-
case NTVariantType.T_VARIANT_TYPE_INTEGER:
28-
return variant.getLong();
29-
case NTVariantType.T_VARIANT_TYPE_NULL:
30-
return null;
31-
case NTVariantType.T_VARIANT_TYPE_STRING:
32-
return variant.getString();
33-
case NTVariantType.T_VARIANT_TYPE_OBJECT: {
34-
const result = {} as any;
35-
const keys = variant.getObjectKeys();
36-
let key;
37-
for (let index = 0; index < keys.size(); index++) {
38-
key = keys.get(index);
39-
result[key] = nativeVariantToJS(variant.getObjectElement(key));
40-
}
41-
return result;
42-
}
43-
}
15+
return JSON.parse(variant.toString());
4416
}
4517
export function JSVariantToNative(variant: any) {
4618
if (Array.isArray(variant)) {
47-
const builder = NTVariantArrayBuilder.alloc().init();
48-
for (let index = 0; index < variant.length; index++) {
49-
const obj = variant[index];
50-
if (typeof obj === 'boolean') {
51-
builder.addBool(obj);
52-
} else if (typeof obj === 'number') {
53-
builder.addDouble(obj);
54-
} else if (typeof obj === 'string') {
55-
builder.addString(obj);
56-
} else {
57-
builder.addVariant(JSVariantToNative(obj));
58-
}
59-
}
60-
return builder.buildVariant();
19+
return NTVariant.fromString(JSON.stringify(variant));
6120
} else if (typeof variant === 'object') {
62-
const builder = NTVariantObjectBuilder.alloc().init();
63-
Object.keys(variant).forEach((k) => {
64-
const obj = variant[k];
65-
if (typeof obj === 'boolean') {
66-
builder.setBoolVal(k, obj);
67-
} else if (typeof obj === 'number') {
68-
builder.setDoubleVal(k, obj);
69-
} else if (typeof obj === 'string') {
70-
builder.setStringStr(k, obj);
71-
} else {
72-
builder.setVariantVar(k, JSVariantToNative(obj));
73-
}
74-
});
75-
return builder.buildVariant();
21+
return NTVariant.fromString(JSON.stringify(variant));
7622
} else if (variant) {
7723
if (typeof variant === 'boolean') {
7824
return NTVariant.alloc().initWithBoolVal(variant);
7925
} else if (typeof variant === 'number') {
8026
return NTVariant.alloc().initWithDoubleVal(variant);
8127
} else if (typeof variant === 'string') {
8228
return NTVariant.alloc().initWithString(variant);
83-
} else {
84-
return NTVariant.alloc().initWithObject(variant);
29+
// } else {
30+
// return NTVariant.alloc().initWithObject(variant);
8531
}
8632
}
8733
return null;

0 commit comments

Comments
 (0)