/** FILE: buffer.java **/
package BUFFER;
import java.io.*;
// Referenced classes of package BUFFER:
// accex
/*
* CLASS buffer
*
* classe Astratta buffer che contiene i due medodi di inserimento e cancellazione:
* Put() e Get() operazioni basi (NESSUNA POLITICA)
* le politiche verranno implementate nelle classi bufferan, bufferfi e buffermy.
* Contiene tutte le variabili in comune alle tre politiche e il medo stampa()
*/
public abstract class buffer
{
/*
* METODI PUT() e GET()
* void PUT(String msg) per inserire una stringa nel buffer
* String GET() per leggere una stringa dal buffer
*/
public void put(String s)
throws InterruptedException
{
aux[in] = s.length(); // salva la lunghezza
for(int i = 0; i < s.length(); i++)
buff[(in + i) % 200] = s.charAt(i); // copia carattere per carattere
in = (in + s.length()) % 200; //incrementa con modulo l'indice di scrittura
liberi -= s.length(); // aggiorna lo spazio libero
stampa("PUT:" + s);
}
public String get()
throws InterruptedException
{
int i = aux[out]; // ricorda la lunghezza
char ac[] = new char[i];
for(int j = 0; j < i; j++)
ac[j] = buff[(out + j) % 200]; // legge il messaggio carattere per carattere
out = (out + i) % 200; // aggiorna con modulo l'indice di lettura
liberi += i; // aggiorna lo spazio libero
stampa("GET:" + new String(ac));
return new String(ac);
}
/*
* METODO stampa()
*
* stampa su monitor le opeazioni di put e get e le stampa anche su il file di log "output.txt"
*/
void stampa(String s)
{
try
{
if(fout == null)
fout = new FileOutputStream("output.txt");
System.out.println(s + " " + accessi);
fout.write((s + "\n").getBytes());
return;
}
catch(IOException _ex)
{
return;
}
}
public void chiudifile()
{
try
{
fout.close();
return;
}
catch(IOException _ex)
{
return;
}
}
public buffer()
{
buff = new char[200];
aux = new int[200];
liberi = 200;
accput = new accex();
accget = new accex();
Startaccput = accput;
Startaccget = accget;
}
char buff[];
int aux[];
int in;
int out;
int liberi;
public int accessi;
accex accput;
accex accget;
public accex Startaccput;
public accex Startaccget;
FileOutputStream fout;
}