1/* Abstract output stream data type. 2 Copyright (C) 2006 Free Software Foundation, Inc. 3 Written by Bruno Haible <bruno@clisp.org>, 2006. 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18#ifndef _OSTREAM_H 19#define _OSTREAM_H 20 21#include <stddef.h> 22#include <string.h> 23 24#include "moo.h" 25 26/* An output stream is an object to which one can feed a sequence of bytes. */ 27 28struct ostream 29{ 30methods: 31 32 /* Write a sequence of bytes to a stream. */ 33 void write_mem (ostream_t stream, const void *data, size_t len); 34 35 /* Bring buffered data to its destination. */ 36 void flush (ostream_t stream); 37 38 /* Close and free a stream. */ 39 void free (ostream_t stream); 40}; 41 42#ifdef __cplusplus 43extern "C" { 44#endif 45 46/* Write a string's contents to a stream. */ 47extern void ostream_write_str (ostream_t stream, const char *string); 48 49#if HAVE_INLINE 50 51#define ostream_write_str ostream_write_str_inline 52static inline void 53ostream_write_str (ostream_t stream, const char *string) 54{ 55 ostream_write_mem (stream, string, strlen (string)); 56} 57 58#endif 59 60#ifdef __cplusplus 61} 62#endif 63 64#endif /* _OSTREAM_H */ 65