All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fuwjin.grin.env.PublishStream Maven / Gradle / Ivy

package org.fuwjin.grin.env;

import java.io.IOException;
import java.io.Writer;

public class PublishStream extends AbstractStream {
   private int locks;
   private int index;
   private final Writer writer;

   public PublishStream(final Writer writer) {
      this.writer = writer;
   }

   public void append(final Object value) throws IOException {
      final String str = value == null ? "" : value.toString();
      final int p = nextIndex();
      ensureCapacity();
      array()[indexOf(p)] = str;
      if(locks == 0) {
         writer.append(str);
         index++;
      }
      advance(str);
   }

   @Override
   public int mark() {
      locks++;
      return super.mark();
   }

   @Override
   public void release(final int mark) throws IOException {
      super.release(mark);
      locks--;
      while(index < nextIndex() && !isMarked(index)) {
         final String str = valueAt(index);
         writer.append(str);
         index++;
      }
   }

   @Override
   protected String[] newArray(final int size) {
      return new String[size];
   }

   @Override
   protected String valueAt(final int index) {
      return array()[indexOf(index)];
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy