Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package uk.co.probablyfine.dirty;
  
  
 import java.util.List;
 
 import static java.lang.Long.valueOf;
 import static uk.co.probablyfine.dirty.utils.Exceptions.unchecked;
 
 public class Store<T> {
 
   private final FileChannel fileChannel;
   private final MappedByteBuffer memoryMappedFile;
   private final int offSet;
   private final List<Fieldfields;
   private final Class<T> klass;
   private final List<BiConsumer<T,Integer>> writeObservers = new ArrayList<>();
   private int size;
 
   public Store(String pathClass<T> klass) {
     this. = klass;
     this. = Classes.primitiveFields(klass).collect(Collectors.toList());
     this. = Nio.fileChannel(path);
     this. = Types.offSetForClass(klass);
     this. = valueOf(unchecked(::size) / ).intValue();
     this. = Nio.mapFile(, 1024*1024*2);
   }
 
   public void put(T t) {
     .forEach(field -> {
       Object unchecked = unchecked(() -> field.get(t));
       Types fieldType = Types.of(field.getType());
       fieldType.getWriteField().accept(unchecked);
     });
 
     this..forEach(x -> x.accept(tthis.));
 
     this.++;
   }
 
   public Stream<T> all() throws IllegalAccessException {
     Stream.Builder<T> builder = Stream.builder();
 
     for(int index = 0; index < this.index++) {
       builder.add(extractEntry(index));
     }
 
     return builder.build();
   }
 
   public Stream<T> reverse() throws IllegalAccessException {
     Stream.Builder<T> builder = Stream.builder();
 
     for(int index = (this.-1); index >= 0; index--) {
       builder.add(extractEntry(index));
     }
 
     return builder.build();
   }
 
   private T extractEntry(int indexthrows IllegalAccessException {
     AtomicInteger cursor = new AtomicInteger(index * this.);
     T t = unchecked(::newInstance);
 
     .forEach(field -> {
       final Types fieldType = Types.of(field.getType());
       final Object apply = fieldType.getReadField().apply(cursor.get());
 
       unchecked(() -> field.set(tapply));
 
       cursor.addAndGet(fieldType.getSize());
     });
     return t;
   }
 
   public T get(int indexthrows IllegalAccessException {
     return extractEntry(index);
   }
 
   public void observeWrites(BiConsumer<T, IntegerobserveWriteFunction) {
     this..add(observeWriteFunction);
   }
 
   public interface WithFile<T> {
     Store<T> from(String path);
   }
 
   public static <T> WithFile<T> of(final Class<T> fooClass) {
    return path -> new Store<>(pathfooClass);
  }
New to GrepCode? Check out our FAQ X