// Path: src/main/java/io/usethesource/capsule/SetMultimapFactory.java
// public class SetMultimapFactory {
// 
//   // private final Class<? extends Immutable<?, ?>> targetClass;
// 
//   private final Method persistentMapOfEmpty;
//   // private final Method persistentMapOfKeyValuePairs;
// 
//   private final Method transientMapOfEmpty;
//   // private final Method transientMapOfKeyValuePairs;
// 
//   public SetMultimapFactory(Class<?> targetClass) {
//     // this.targetClass = targetClass;
// 
//     try {
//       persistentMapOfEmpty = targetClass.getMethod("of");
//       // persistentMapOfKeyValuePairs = targetClass.getMethod("of", Object.class, Object[].class);
// 
//       transientMapOfEmpty = targetClass.getMethod("transientOf");
//       // transientMapOfKeyValuePairs = targetClass.getMethod("transientOf", Object.class,
//       // Object[].class);
//     } catch (NoSuchMethodException | SecurityException e) {
//       e.printStackTrace();
//       throw new RuntimeException(e);
//     }
//   }
// 
//   // public Class<? extends Immutable<?, ?>> getTargetClass() {
//   // return targetClass;
//   // }
// 
//   public final <K, V> SetMultimap.Immutable<K, V> of() {
//     try {
//       return (SetMultimap.Immutable<K, V>) persistentMapOfEmpty.invoke(null);
//     } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   // @SuppressWarnings("unchecked")
//   // public final <K, V> SetMultimap.Immutable<K, V> of(K key, V... values) {
//   // try {
//   // return (SetMultimap.Immutable<K, V>) persistentMapOfKeyValuePairs.invoke(null, key, values);
//   // } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//   // throw new RuntimeException(e);
//   // }
//   // }
// 
//   public final <K, V> SetMultimap.Transient<K, V> transientOf() {
//     try {
//       return (SetMultimap.Transient<K, V>) transientMapOfEmpty.invoke(null);
//     } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   // @SuppressWarnings("unchecked")
//   // public final <K, V> SetMultimap.Transient<K, V> transientOf(K key, V... values) {
//   // try {
//   // return (SetMultimap.Transient<K, V>) transientMapOfKeyValuePairs.invoke(null, key, values);
//   // } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//   // e.printStackTrace();
//   // throw new RuntimeException(e);
//   // }
//   // }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhSetMultimap.java
// public interface JmhSetMultimap extends JmhValue { // Iterable<JmhValue>
// 
//   boolean isEmpty();
// 
//   int size();
// 
//   JmhSetMultimap insert(JmhValue key, JmhValue value);
// 
//   JmhSetMultimap remove(JmhValue key, JmhValue value);
// 
//   JmhSetMultimap put(JmhValue key, JmhValue value);
// 
//   JmhSetMultimap remove(JmhValue key);
// 
//   boolean containsKey(JmhValue key);
// 
//   boolean containsValue(JmhValue value);
// 
//   boolean contains(JmhValue key, JmhValue value);
// 
//   // JmhValue get(JmhValue key);
//   //
//   // boolean containsValue(JmhValue value);
// 
//   Iterator<JmhValue> iterator();
// 
//   // Iterator<JmhValue> valueIterator();
// 
//   Iterator<Entry<JmhValue, JmhValue>> entryIterator();
// 
//   Iterator<Entry<JmhValue, Object>> nativeEntryIterator();
// 
//   java.util.Set<JmhValue> keySet();
// 
//   public static interface Builder extends JmhBuilder {
// 
//     void insert(JmhValue key, JmhValue value);
// 
//     // void putAll(JmhMap map);
//     //
//     // void putAll(Map<JmhValue, JmhValue> map);
// 
//     @Override
//     JmhSetMultimap done();
// 
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhValue.java
// @CompilerControl(Mode.DONT_INLINE)
// public interface JmhValue {
// 
//   /**
//    * Removes the JmhValue delegation object to reveal its internal representation.
//    *
//    * @return internal representation
//    */
//   Object unwrap();
// 
// }


import io.usethesource.capsule.SetMultimap;
import io.usethesource.capsule.SetMultimapFactory;
import io.usethesource.criterion.api.JmhSetMultimap;
import io.usethesource.criterion.api.JmhValue;
/**
 * Copyright (c) Michael Steindorfer <Centrum Wiskunde & Informatica> and Contributors.
 * All rights reserved.
 *
 * This file is licensed under the BSD 2-Clause License, which accompanies this project
 * and is available under https://opensource.org/licenses/BSD-2-Clause.
 */
package io.usethesource.criterion.impl.persistent.champ;


final class ChampSetMultimapBuilder implements JmhSetMultimap.Builder {

  protected SetMultimap.Immutable<JmhValue, JmhValue> mapContent;
  protected JmhSetMultimap constructedMap;

// Path: src/main/java/io/usethesource/capsule/SetMultimapFactory.java
// public class SetMultimapFactory {
// 
//   // private final Class<? extends Immutable<?, ?>> targetClass;
// 
//   private final Method persistentMapOfEmpty;
//   // private final Method persistentMapOfKeyValuePairs;
// 
//   private final Method transientMapOfEmpty;
//   // private final Method transientMapOfKeyValuePairs;
// 
//   public SetMultimapFactory(Class<?> targetClass) {
//     // this.targetClass = targetClass;
// 
//     try {
//       persistentMapOfEmpty = targetClass.getMethod("of");
//       // persistentMapOfKeyValuePairs = targetClass.getMethod("of", Object.class, Object[].class);
// 
//       transientMapOfEmpty = targetClass.getMethod("transientOf");
//       // transientMapOfKeyValuePairs = targetClass.getMethod("transientOf", Object.class,
//       // Object[].class);
//     } catch (NoSuchMethodException | SecurityException e) {
//       e.printStackTrace();
//       throw new RuntimeException(e);
//     }
//   }
// 
//   // public Class<? extends Immutable<?, ?>> getTargetClass() {
//   // return targetClass;
//   // }
// 
//   public final <K, V> SetMultimap.Immutable<K, V> of() {
//     try {
//       return (SetMultimap.Immutable<K, V>) persistentMapOfEmpty.invoke(null);
//     } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   // @SuppressWarnings("unchecked")
//   // public final <K, V> SetMultimap.Immutable<K, V> of(K key, V... values) {
//   // try {
//   // return (SetMultimap.Immutable<K, V>) persistentMapOfKeyValuePairs.invoke(null, key, values);
//   // } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//   // throw new RuntimeException(e);
//   // }
//   // }
// 
//   public final <K, V> SetMultimap.Transient<K, V> transientOf() {
//     try {
//       return (SetMultimap.Transient<K, V>) transientMapOfEmpty.invoke(null);
//     } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//       throw new RuntimeException(e);
//     }
//   }
// 
//   // @SuppressWarnings("unchecked")
//   // public final <K, V> SetMultimap.Transient<K, V> transientOf(K key, V... values) {
//   // try {
//   // return (SetMultimap.Transient<K, V>) transientMapOfKeyValuePairs.invoke(null, key, values);
//   // } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//   // e.printStackTrace();
//   // throw new RuntimeException(e);
//   // }
//   // }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhSetMultimap.java
// public interface JmhSetMultimap extends JmhValue { // Iterable<JmhValue>
// 
//   boolean isEmpty();
// 
//   int size();
// 
//   JmhSetMultimap insert(JmhValue key, JmhValue value);
// 
//   JmhSetMultimap remove(JmhValue key, JmhValue value);
// 
//   JmhSetMultimap put(JmhValue key, JmhValue value);
// 
//   JmhSetMultimap remove(JmhValue key);
// 
//   boolean containsKey(JmhValue key);
// 
//   boolean containsValue(JmhValue value);
// 
//   boolean contains(JmhValue key, JmhValue value);
// 
//   // JmhValue get(JmhValue key);
//   //
//   // boolean containsValue(JmhValue value);
// 
//   Iterator<JmhValue> iterator();
// 
//   // Iterator<JmhValue> valueIterator();
// 
//   Iterator<Entry<JmhValue, JmhValue>> entryIterator();
// 
//   Iterator<Entry<JmhValue, Object>> nativeEntryIterator();
// 
//   java.util.Set<JmhValue> keySet();
// 
//   public static interface Builder extends JmhBuilder {
// 
//     void insert(JmhValue key, JmhValue value);
// 
//     // void putAll(JmhMap map);
//     //
//     // void putAll(Map<JmhValue, JmhValue> map);
// 
//     @Override
//     JmhSetMultimap done();
// 
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhValue.java
// @CompilerControl(Mode.DONT_INLINE)
// public interface JmhValue {
// 
//   /**
//    * Removes the JmhValue delegation object to reveal its internal representation.
//    *
//    * @return internal representation
//    */
//   Object unwrap();
// 
// }


// Path: src/main/java/io/usethesource/criterion/impl/persistent/champ/ChampSetMultimapBuilder.java
import io.usethesource.capsule.SetMultimap;
import io.usethesource.capsule.SetMultimapFactory;
import io.usethesource.criterion.api.JmhSetMultimap;
import io.usethesource.criterion.api.JmhValue;

/**
 * Copyright (c) Michael Steindorfer <Centrum Wiskunde & Informatica> and Contributors.
 * All rights reserved.
 *
 * This file is licensed under the BSD 2-Clause License, which accompanies this project
 * and is available under https://opensource.org/licenses/BSD-2-Clause.
 */
package io.usethesource.criterion.impl.persistent.champ;


final class ChampSetMultimapBuilder implements JmhSetMultimap.Builder {

  protected SetMultimap.Immutable<JmhValue, JmhValue> mapContent;
  protected JmhSetMultimap constructedMap;

  ChampSetMultimapBuilder(SetMultimapFactory setMultimapFactory) {