Codebase list xfireworks / 819f6ebc-21c3-4570-af87-0806e8960c8b/main StreamP.h
819f6ebc-21c3-4570-af87-0806e8960c8b/main

Tree @819f6ebc-21c3-4570-af87-0806e8960c8b/main (Download .tar.gz)

StreamP.h @819f6ebc-21c3-4570-af87-0806e8960c8b/mainraw · history · blame

/*****************************************************************************/
/* 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.                                                              */
/*****************************************************************************/