public PersistentMVStoreMultiMaplet()

in sources/java-incremental-compilation/jvm-inc-builder/src/com/intellij/tools/build/bazel/jvmIncBuilder/impl/graph/PersistentMVStoreMultiMaplet.java [29:83]


  public PersistentMVStoreMultiMaplet(MVStore store, String mapName, DataType<K> keyType, DataType<V> valueType, Supplier<? extends C> collectionFactory, Function<Integer, C[]> collectionArrayFactory) {
    myCollectionFactory = collectionFactory;
    try {
      C col = collectionFactory.get();
      //noinspection unchecked
      myEmptyCollection = col instanceof List? (C)Collections.emptyList() : col instanceof Set? (C)Collections.emptySet() : col;
      if (col instanceof Set) {
        myAppendDecisionMaker = new AppendSetDecisionMaker();
        myRemoveDecisionMaker = new RemoveSetDecisionMaker();
      }
      else {
        myAppendDecisionMaker = new AppendDecisionMaker();
        myRemoveDecisionMaker = new RemoveDecisionMaker();
      }
      MVMap.Builder<K, C> mapBuilder = new MVMap.Builder<K, C>().keyType(keyType).valueType(new BasicDataType<>() {
        @Override
        public boolean isMemoryEstimationAllowed() {
          return false;
        }

        @Override
        public int getMemory(C obj) {
          return 0;
        }

        @Override
        public void write(WriteBuffer buff, C col) {
          buff.putInt(col.size());
          for (V value : col) {
            valueType.write(buff, value);
          }
        }

        @Override
        public C read(ByteBuffer buff) {
          C acc = myCollectionFactory.get();
          int size = buff.getInt();
          while (size-- > 0) {
            acc.add(valueType.read(buff));
          }
          return acc;
        }

        @Override
        public C[] createStorage(int size) {
          //noinspection unchecked
          return collectionArrayFactory.apply(size);
        }
      });
      myMap = store.openMap(mapName, mapBuilder);
    }
    catch (Throwable e) {
      throw new RuntimeException(e);
    }
  }