// Path: src/main/java/io/usethesource/criterion/BenchmarkUtils.java
// public enum Archetype {
//   MUTABLE, IMMUTABLE, PERSISTENT
// }
// 
// Path: src/main/java/io/usethesource/criterion/BenchmarkUtils.java
// public static enum DataType {
//   MAP, SET_MULTIMAP, SET
// }
// 
// 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 java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import io.usethesource.criterion.BenchmarkUtils.Archetype;
import io.usethesource.criterion.BenchmarkUtils.DataType;
import io.usethesource.criterion.api.JmhValue;
import objectexplorer.ObjectGraphMeasurer.Footprint;
/**
 * 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;



public final class FootprintUtils {

  final static String CSV_HEADER =
      "elementCount,run,className,dataType,archetype,supportsStagedMutability,footprintInBytes,footprintInObjects,footprintInReferences"; // ,footprintInPrimitives

  /*
   * NOTE: with extensions for heterogeneous data
   */
  public enum MemoryFootprintPreset {
    RETAINED_SIZE, DATA_STRUCTURE_OVERHEAD, RETAINED_SIZE_WITH_BOXED_INTEGER_FILTER
  }

  public static String measureAndReport(final Object objectToMeasure, final String className,
// Path: src/main/java/io/usethesource/criterion/BenchmarkUtils.java
// public enum Archetype {
//   MUTABLE, IMMUTABLE, PERSISTENT
// }
// 
// Path: src/main/java/io/usethesource/criterion/BenchmarkUtils.java
// public static enum DataType {
//   MAP, SET_MULTIMAP, SET
// }
// 
// 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/FootprintUtils.java
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import io.usethesource.criterion.BenchmarkUtils.Archetype;
import io.usethesource.criterion.BenchmarkUtils.DataType;
import io.usethesource.criterion.api.JmhValue;
import objectexplorer.ObjectGraphMeasurer.Footprint;

/**
 * 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;



public final class FootprintUtils {

  final static String CSV_HEADER =
      "elementCount,run,className,dataType,archetype,supportsStagedMutability,footprintInBytes,footprintInObjects,footprintInReferences"; // ,footprintInPrimitives

  /*
   * NOTE: with extensions for heterogeneous data
   */
  public enum MemoryFootprintPreset {
    RETAINED_SIZE, DATA_STRUCTURE_OVERHEAD, RETAINED_SIZE_WITH_BOXED_INTEGER_FILTER
  }

  public static String measureAndReport(final Object objectToMeasure, final String className,
      DataType dataType, Archetype archetype, boolean supportsStagedMutability, int size, int run,