Logo Search packages:      
Sourcecode: ibus-unikey version File versions  Download package

byteio.h

// -*- coding:unix; mode:c++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
#ifndef BYTE_IO_STREAM_H
#define BYTE_IO_STREAM_H


//#include "vnconv.h"
#include <stdio.h>

typedef unsigned char UKBYTE;
typedef unsigned short UKWORD;
typedef unsigned int UKDWORD;

//----------------------------------------------------
class ByteStream {
 public:
  virtual ~ByteStream(){};
};

//----------------------------------------------------
class ByteInStream: public ByteStream
{
public:
      virtual int getNext(UKBYTE &b) = 0;
      virtual int peekNext(UKBYTE &b) = 0;
      virtual int unget(UKBYTE b) = 0;

      virtual int getNextW(UKWORD &w) = 0;
      virtual int peekNextW(UKWORD &w) = 0;

      virtual int getNextDW(UKDWORD &dw) = 0;

      virtual int bookmark() //no support for bookmark by default
      {
            return 0;
      }

      virtual int gotoBookmark()
      {
            return 0;
      }

      virtual int eos() = 0; //end of stream
      virtual int close() = 0;
};

//----------------------------------------------------
class ByteOutStream: public ByteStream
{
public:
      virtual int putB(UKBYTE b) = 0;
      virtual int putW(UKWORD w) = 0;
      virtual int puts(const char *s, int size = -1) = 0; // write an 8-bit string
      virtual int isOK() = 0;// get current stream state
};

//----------------------------------------------------
class StringBIStream : public ByteInStream
{
protected:
      int m_eos;
      UKBYTE *m_data, *m_current;
      int m_len, m_left;

      struct {
            int eos;
            UKBYTE *data, *current;
            int len, left;
      } m_bookmark;

      int m_didBookmark;
            
public:
      StringBIStream(UKBYTE *data, int len, int elementSize = 1);
      virtual int getNext(UKBYTE &b);
      virtual int peekNext(UKBYTE &b);
      virtual int unget(UKBYTE b);

      virtual int getNextW(UKWORD &w);
      virtual int peekNextW(UKWORD &w);

      virtual int getNextDW(UKDWORD &dw);

    virtual int eos(); //end of stream
      virtual int close();

      virtual int bookmark();
      virtual int gotoBookmark();

      void reopen();
      int left() {
            return m_left;
      }
};

//----------------------------------------------------
class FileBIStream : public ByteInStream
{
protected:
      FILE *m_file;
      int m_bufSize;
      char *m_buf;
      int m_own;
      int m_didBookmark;

      struct {
            long pos;
      } m_bookmark;

      //some systems don't have wide char IO functions
      //we have to use this variables to implement that
      UKBYTE m_readByte; 
      int m_readAhead;
      int m_lastIsAhead;

public:

      FileBIStream(int bufsize = 8192, char *buf = NULL);
//    FileBIStream(char *fileName, int bufsize = 8192, void *buf = NULL);

      int open(const char *fileName);
      void attach(FILE *f);
      virtual int close();

      virtual int getNext(UKBYTE &b);
      virtual int peekNext(UKBYTE &b);
      virtual int unget(UKBYTE b);

      virtual int getNextW(UKWORD &w);
      virtual int peekNextW(UKWORD &w);

    virtual int getNextDW(UKDWORD &dw);

    virtual int eos(); //end of stream

      virtual int bookmark();
      virtual int gotoBookmark();

      virtual ~FileBIStream();
};


//----------------------------------------------------
class StringBOStream : public ByteOutStream
{
protected:
      UKBYTE *m_buf, *m_current;
      int m_out;
      int m_len;
      int m_bad;
public:
      StringBOStream(UKBYTE *buf, int len);
      virtual int putB(UKBYTE b);
      virtual int putW(UKWORD w);
      virtual int puts(const char *s, int size = -1);
      virtual int isOK(); // get current stream state

      virtual int close()     
      {
            return 1;
      };

      void reopen();
      int getOutBytes() {
            return m_out;
      }
};

//----------------------------------------------------
class FileBOStream : public ByteOutStream
{
protected:
      FILE *m_file;
      int m_bufSize;
      char *m_buf;
      int m_own;
      int m_bad;

public:
      FileBOStream(int bufsize = 8192, char *buf = NULL);
//    FileBOStream(char *fileName, int bufsize = 8192, void *buf = NULL);

      int open(const char *fileName);
      void attach(FILE *);
      virtual int close();

      virtual int putB(UKBYTE b);
      virtual int putW(UKWORD w);
      virtual int puts(const char *s, int size = -1);
      virtual int isOK(); // get current stream state
      virtual ~FileBOStream();
};


#endif

Generated by  Doxygen 1.6.0   Back to index