/*****************************************************************************/
/* Stream Class Library Copyright (c) 1999-2000 Sakai Hiroaki. */
/* All Rights Reserved. */
/*===========================================================================*/
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; see the file COPYING. If not, write to */
/* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/*****************************************************************************/
#ifndef _STREAMP_H_INCLUDED_
#define _STREAMP_H_INCLUDED_
/*****************************************************************************/
/* ここから */
/*****************************************************************************/
#include "Stream.h"
/*****************************************************************************/
/* ヘッダファイルのインクルード(プライベートなもの) */
/*****************************************************************************/
/* None */
/*****************************************************************************/
/* 型の定義(外部に公開しないもの) */
/*****************************************************************************/
/*===========================================================================*/
/* 読み込み元の本体のタイプ */
/*===========================================================================*/
typedef enum {
STREAM_TYPE_NONE, /* 読み込み元が無い */
STREAM_TYPE_FILE_POINTER, /* ファイルポインタから読み込む */
STREAM_TYPE_CHARACTERS /* 文字列(char * 型)から読み込む */
} StreamType;
/*===========================================================================*/
/* 読み込み元の本体 */
/*===========================================================================*/
typedef union {
void * dummy; /* 読み込み元が無い */
FILE * file_pointer; /* ファイルポインタから読み込む */
char * characters; /* 文字列(char * 型)から読み込む */
} StreamObject;
/*===========================================================================*/
/* unget 用バッファ */
/*===========================================================================*/
typedef struct _UngetBuffer {
char character;
struct _UngetBuffer * next;
} UngetBuffer;
/*===========================================================================*/
/* Stream クラスの本体 */
/*===========================================================================*/
typedef struct _Stream {
UngetBuffer * unget_buffer; /* バッファ(何文字でも unget できる) */
int end_flag; /* 終了のフラグ(読み込むものが無いとき真) */
CreateStreamFrom from;
/* 作成元のオブジェクトのタイプ(ファイル名,文字列など) */
StreamType type; /* 読み込み元の本体のタイプ(ファイル,String 型など) */
StreamObject object; /* 読み込み元の本体(ファイル,String 型など) */
} _Stream;
/*****************************************************************************/
/* ここまで */
/*****************************************************************************/
#endif
/*****************************************************************************/
/* End of File. */
/*****************************************************************************/