@@ -190,7 +190,6 @@ public String toString() {
190
190
191
191
public static final Builder <Set <byte []>> BINARY_SET = new Builder <Set <byte []>>() {
192
192
@ Override
193
- @ SuppressWarnings ("unchecked" )
194
193
public Set <byte []> build (Object data ) {
195
194
if (null == data ) {
196
195
return null ;
@@ -477,6 +476,66 @@ public String toString() {
477
476
}
478
477
};
479
478
479
+ public static final Builder <Map <String , Double >> STRING_DOUBLE_MAP = new Builder <Map <String , Double >>() {
480
+ @ Override
481
+ @ SuppressWarnings ("unchecked" )
482
+ public Map <String , Double > build (Object data ) {
483
+ final List <Object > list = (List <Object >) data ;
484
+ if (list .isEmpty ()) return Collections .emptyMap ();
485
+
486
+ if (list .get (0 ) instanceof KeyValue ) {
487
+ final Map <String , Double > map = new LinkedHashMap <>(list .size (), 1f );
488
+ for (Object o : list ) {
489
+ KeyValue <?, ?> kv = (KeyValue <?, ?>) o ;
490
+ map .put (STRING .build (kv .getKey ()), DOUBLE .build (kv .getValue ()));
491
+ }
492
+ return map ;
493
+ } else {
494
+ final Map <String , Double > map = new LinkedHashMap <>(list .size () / 2 , 1f );
495
+ final Iterator iterator = list .iterator ();
496
+ while (iterator .hasNext ()) {
497
+ map .put (STRING .build (iterator .next ()), DOUBLE .build (iterator .next ()));
498
+ }
499
+ return map ;
500
+ }
501
+ }
502
+
503
+ @ Override
504
+ public String toString () {
505
+ return "Map<String, Double>" ;
506
+ }
507
+ };
508
+
509
+
510
+ public static final Builder <Map <byte [], Double >> BINARY_DOUBLE_MAP = new Builder <Map <byte [], Double >>() {
511
+ @ Override
512
+ @ SuppressWarnings ("unchecked" )
513
+ public Map <byte [], Double > build (Object data ) {
514
+ final List <Object > list = (List <Object >) data ;
515
+ if (list .isEmpty ()) return Collections .emptyMap ();
516
+
517
+ if (list .get (0 ) instanceof KeyValue ) {
518
+ final Map <byte [], Double > map = new LinkedHashMap <>(list .size (), 1f );
519
+ for (Object o : list ) {
520
+ KeyValue <?, ?> kv = (KeyValue <?, ?>) o ;
521
+ map .put (BINARY .build (kv .getKey ()), DOUBLE .build (kv .getValue ()));
522
+ }
523
+ return map ;
524
+ } else {
525
+ final Map <byte [], Double > map = new LinkedHashMap <>(list .size () / 2 , 1f );
526
+ final Iterator iterator = list .iterator ();
527
+ while (iterator .hasNext ()) {
528
+ map .put (BINARY .build (iterator .next ()), DOUBLE .build (iterator .next ()));
529
+ }
530
+ return map ;
531
+ }
532
+ }
533
+
534
+ @ Override
535
+ public String toString () {
536
+ return "Map<String, Double>" ;
537
+ }
538
+ };
480
539
public static final Builder <KeyValue <String , String >> KEYED_ELEMENT = new Builder <KeyValue <String , String >>() {
481
540
@ Override
482
541
@ SuppressWarnings ("unchecked" )
@@ -1817,6 +1876,43 @@ public String toString() {
1817
1876
@ Deprecated
1818
1877
public static final Builder <StreamFullInfo > STREAM_INFO_FULL = STREAM_FULL_INFO ;
1819
1878
1879
+ public static final Builder <VectorInfo > VECTOR_INFO = new Builder <VectorInfo >() {
1880
+
1881
+ final Map <String , Builder > mappingFunctions = createDecoderMap ();
1882
+
1883
+ private Map <String , Builder > createDecoderMap () {
1884
+ Map <String , Builder > tempMappingFunctions = new HashMap <>();
1885
+ tempMappingFunctions .put (VectorInfo .VECTOR_DIM , LONG );
1886
+ tempMappingFunctions .put (VectorInfo .TYPE , STRING );
1887
+ tempMappingFunctions .put (VectorInfo .SIZE , LONG );
1888
+ tempMappingFunctions .put (VectorInfo .MAX_NODE_UID , LONG );
1889
+ tempMappingFunctions .put (VectorInfo .VSET_UID , LONG );
1890
+ tempMappingFunctions .put (VectorInfo .MAX_NODES , LONG );
1891
+ tempMappingFunctions .put (VectorInfo .PROJECTION_INPUT_DIM , LONG );
1892
+ tempMappingFunctions .put (VectorInfo .ATTRIBUTES_COUNT , LONG );
1893
+ tempMappingFunctions .put (VectorInfo .MAX_LEVEL , LONG );
1894
+ return tempMappingFunctions ;
1895
+ }
1896
+
1897
+ @ Override
1898
+ @ SuppressWarnings ("unchecked" )
1899
+ public VectorInfo build (Object data ) {
1900
+ if (null == data ) {
1901
+ return null ;
1902
+ }
1903
+
1904
+ List <Object > vectorEntries = (List <Object >) data ;
1905
+ Iterator <Object > iterator = vectorEntries .iterator ();
1906
+
1907
+ return new VectorInfo (createMapFromDecodingFunctions (iterator , mappingFunctions ));
1908
+ }
1909
+
1910
+ @ Override
1911
+ public String toString () {
1912
+ return "VectorInfo" ;
1913
+ }
1914
+ };
1915
+
1820
1916
public static final Builder <StreamPendingSummary > STREAM_PENDING_SUMMARY = new Builder <StreamPendingSummary >() {
1821
1917
@ Override
1822
1918
@ SuppressWarnings ("unchecked" )
@@ -2152,6 +2248,92 @@ public String toString() {
2152
2248
}
2153
2249
};
2154
2250
2251
+ // Vector Set builders
2252
+
2253
+
2254
+ public static final Builder <RawVector > VEMB_RAW_RESULT = new Builder <RawVector >() {
2255
+ @ Override
2256
+ @ SuppressWarnings ("unchecked" )
2257
+ public RawVector build (Object data ) {
2258
+ if (data == null ) return null ;
2259
+ List <Object > list = (List <Object >) data ;
2260
+
2261
+ String quantizationType = STRING .build (list .get (0 ));
2262
+ byte [] rawData = (byte []) list .get (1 );
2263
+ Double norm = DOUBLE .build (list .get (2 ));
2264
+ Double quantizationRange = list .size () > 3 ? DOUBLE .build (list .get (3 )) : null ;
2265
+
2266
+ return new RawVector (quantizationType , rawData , norm , quantizationRange );
2267
+ }
2268
+
2269
+ @ Override
2270
+ public String toString () {
2271
+ return "RawVector" ;
2272
+ }
2273
+ };
2274
+
2275
+ // VLINKS builders
2276
+ public static final Builder <List <Map <String , Double >>> VLINKS_WITH_SCORES_RESULT = new Builder <List <Map <String , Double >>>() {
2277
+ @ Override
2278
+ @ SuppressWarnings ("unchecked" )
2279
+ public List <Map <String , Double >> build (Object data ) {
2280
+ if (data == null ) return null ;
2281
+ List <Object > list = (List <Object >) data ;
2282
+
2283
+ List <Map <String , Double >> result = new ArrayList <>();
2284
+ for (Object scoresRaw : list ) {
2285
+ if (scoresRaw == null ) continue ;
2286
+ Map <String , Double > scores = STRING_DOUBLE_MAP .build (scoresRaw );
2287
+ result .add (scores );
2288
+ }
2289
+
2290
+ return result ;
2291
+ }
2292
+
2293
+ @ Override
2294
+ public String toString () {
2295
+ return "List<Map<String, Double>>" ;
2296
+ }
2297
+ };
2298
+
2299
+ public static final Builder <List <List <byte []>>> BINARY_LIST_LIST = new Builder <List <List <byte []>>>() {
2300
+ @ Override
2301
+ @ SuppressWarnings ("unchecked" )
2302
+ public List <List <byte []>> build (Object data ) {
2303
+ if (null == data ) return null ;
2304
+ return ((List <Object >) data ).stream ().map (BINARY_LIST ::build ).collect (Collectors .toList ());
2305
+ }
2306
+
2307
+ @ Override
2308
+ public String toString () {
2309
+ return "List<List<String>>" ;
2310
+ }
2311
+ };
2312
+
2313
+
2314
+ public static final Builder <List <Map <byte [], Double >>> VLINKS_WITH_SCORES_RESULT_BINARY = new Builder <List <Map <byte [], Double >>>() {
2315
+ @ Override
2316
+ @ SuppressWarnings ("unchecked" )
2317
+ public List <Map <byte [], Double >> build (Object data ) {
2318
+ if (data == null ) return null ;
2319
+ List <Object > list = (List <Object >) data ;
2320
+
2321
+ List <Map <byte [], Double >> result = new ArrayList <>();
2322
+ for (Object scoresRaw : list ) {
2323
+ if (scoresRaw == null ) continue ;
2324
+ Map <byte [], Double > scores = BINARY_DOUBLE_MAP .build (scoresRaw );
2325
+ result .add (scores );
2326
+ }
2327
+
2328
+ return result ;
2329
+ }
2330
+
2331
+ @ Override
2332
+ public String toString () {
2333
+ return "List<Map<byte[], Double>>" ;
2334
+ }
2335
+ };
2336
+
2155
2337
/**
2156
2338
* A decorator to implement Set from List. Assume that given List do not contains duplicated
2157
2339
* values. The resulting set displays the same ordering, concurrency, and performance
0 commit comments