// FILE:        BufFileInput.h
// AUTHOR:      Alexey Demakov (AVD) demakov@kazbek.ispras.ru
// CREATION:    26-JAN-1998
// DESCRIPTION: File Input Stream with lookahead for Scanner
// Tested under Win32 with ANTLR 1.33 MR10 and MSVC 5.0

// Change History:
//
//   28-May-1998    Add virtual destructor to release buffer
//                  Manfred Kogler (km@cast.uni-linz.ac.at)
//                  (1.33MR14)

#ifndef BufFileInput_h
#define BufFileInput_h

#include "pcctscfg.h"

#include "pccts_stdio.h"

PCCTS_NAMESPACE_STD

#include "DLexerBase.h"

class DllExportPCCTS BufFileInput : public DLGInputStream
{
public:
    // constructor
    // f - input stream
    // buf_size - size of buffer (maximal length for string in is_in)

    BufFileInput(FILE *f, int buf_size = 8 );

    virtual ~BufFileInput();

    // gets next char from stream

    virtual int nextChar( void );

    // looks in stream and compares next l characters with s
    // returns the result of comparision

    int lookahead( char* s );

private:
    FILE *input; // input stream;
    int* buf;    // buffer
    int  size;   // size of buffer
    int  start;  // position of the first symbol in buffer
    int  len;    // count of characters in buffers
};

#endif
// end of file BufFileInput.h
