code: public static BitWriter writerTo(BitStore store, Operation operation, int finalPos, int initialPos) {
  		if (store == null) throw new IllegalArgumentException("null store");
  		if (operation == null) throw new IllegalArgumentException("null operation");
  		if (finalPos < 0) throw new IllegalArgumentException("negative finalPos");
  		if (initialPos < finalPos) throw new IllegalArgumentException("finalPos exceeds initialPos");
  		if (initialPos > store.size()) throw new IllegalArgumentException("invalid initialPos");
  
  		switch(operation) {
  		case SET: return new BitStoreWriter.Set(store, finalPos, initialPos);
  		case AND: return new BitStoreWriter.And(store, finalPos, initialPos);
  		case OR:  return new BitStoreWriter.Or (store, finalPos, initialPos);
  		case XOR: return new BitStoreWriter.Xor(store, finalPos, initialPos);
  		default:
  			throw new IllegalStateException("unsupported operation");
  		}
  	}
docs: Creates a {@link BitWriter} that writes its bits to a {@link BitStore}
  using a specified {@link Operation}. This method is primarily intended to
  assist in implementing a highly adapted {@link BitStore} implementation.
  Generally {@link BitStore.Op#openWriter(int, int)},
  {@link BitStore#openWriter(int, int)}
  {@link BitStore.Op#openWriter(int, int)} and should be used in preference
  to this method. Note that the {@link BitWriter} will
  <em>write in big-endian order</em> which this means that the first bit is
  written at the largest index, working downwards to the least index.
  
  @param store
  the store to which bits will be written
  @param operation
  the operation that should be applied on writing
  @param finalPos
  the (exclusive) index at which the writer stops; less than
  <code>initialPos</code>
  @param initialPos
  the (inclusive) index at which the writer starts; greater than
  <code>finalPos</code>
  @return a writer into the store
  @see BitStore#openWriter()
  @see BitStore#openWriter(int, int)
  @see BitStore.Op#openWriter(int, int)