Source

gd-libgd / src / gd_io_stream.h

kshepherd 5583a41 







pierrejoye e20413b 
kshepherd 5583a41 



pierrejoye e20413b 
kshepherd 5583a41 
























pierrejoye e20413b 
kshepherd 5583a41 







pierrejoye e20413b 


kshepherd 5583a41 








pierrejoye e20413b 
kshepherd 5583a41 







pierrejoye e20413b 
kshepherd 5583a41 

pierrejoye e20413b 
kshepherd 5583a41 


pierrejoye e20413b 
kshepherd 5583a41 
pierrejoye e20413b 
kshepherd 5583a41 



pierrejoye e20413b 
kshepherd 5583a41 







pierrejoye e20413b 


kshepherd 5583a41 








pierrejoye e20413b 
kshepherd 5583a41 







pierrejoye e20413b 
kshepherd 5583a41 

pierrejoye e20413b 
kshepherd 5583a41 


pierrejoye e20413b 
kshepherd 5583a41 
pierrejoye e20413b 
kshepherd 5583a41 

/* *****************************************************************************
** $Id$
** Initial file written and documented by:
** Kevin Shepherd <kshepherd@php.net> December 2007
** of Scarlet Line http://www.scarletline.com/
*******************************************************************************/
/** \file gd_io_stream.h
	\brief C++ standard library iostream specializations of gdIOCtx.

	Note that all of the methods defined in this header are internal to the
	libgd library, except for the constructors.
	Only the constructors are needed by a user of the libgd API.
	This file does not use or need gdpp.h, but if GD::Image is
	used, then C++ coding becomes even simpler, and the classes below
	become entirely hidden implementation details.
	Example usage, convert png to gif:
	#include <fstream>
	#include "gd_io_stream.h"
	std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
	if (in.good())
		{
		istreamIOCtx _in_ctx(in);
		gdImagePtr im_in = gdImageCreateFromPngCtx ( & _in_ctx);
		std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
		ostreamIOCtx _out_ctx(out);
		gdImageGifCtx(im_in, & _out_ctx);
		}
	gdImageDestroy(im_in);
*/
#ifdef __cplusplus
#ifndef _gd_io_stream_h
#define _gd_io_stream_h

#include "gd.h"
#include <iostream>

/** Standard library input stream specialization of gdIOCtx
*/
class BGD_EXPORT_DATA_IMPL istreamIOCtx : public gdIOCtx
{
public:
	typedef std::istream	stream_type;
	/** Construct an instance of this input stream specialization,
		given an input stream.
		For example:
		std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
		istreamIOCtx in_ctx(in);
	*/
	istreamIOCtx(stream_type & __stream) {
		init( & __stream);
	}

	static int	Getbuf (struct gdIOCtx * ctx, void * buf, int size);
	static int	Putbuf (struct gdIOCtx * , const void * , int );
	static void	Putchar (struct gdIOCtx * , int );
	static int	Getchar (struct gdIOCtx * ctx);
	static int	Seek (struct gdIOCtx * ctx, const int pos);
	static long	Tell (struct gdIOCtx * ctx);
	static void	FreeCtx (struct gdIOCtx * ctx);

	void init(stream_type * __stream) {
		getC = Getchar;
		putC = Putchar;
		getBuf = Getbuf;
		putBuf = Putbuf;
		tell = Tell;
		seek = Seek;
		gd_free = FreeCtx;
		_M_stream = __stream;
	}
private:
	stream_type *	_M_stream;
};
/** Allocate a new instance of the class
*/
inline gdIOCtx * gdNewIstreamCtx (std::istream * __stream)
{
	return new istreamIOCtx(* __stream);
}

/** Standard library output stream specialization of gdIOCtx
*/
class BGD_EXPORT_DATA_IMPL ostreamIOCtx : public gdIOCtx
{
public:
	typedef std::ostream	stream_type;
	/** Construct an instance of this output stream specialization,
		given an output stream.
		For example:
		std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
		ostreamIOCtx out_ctx(out);
	*/
	ostreamIOCtx(stream_type & __stream) {
		init( & __stream);
	}

	static int	Getbuf (struct gdIOCtx * , void * , int );
	static int	Putbuf (struct gdIOCtx * ctx, const void * buf, int size);
	static int	Getchar (struct gdIOCtx * );
	static void	Putchar (struct gdIOCtx * ctx, int a);
	static int	Seek (struct gdIOCtx * ctx, const int pos);
	static long	Tell (struct gdIOCtx * ctx);
	static void	FreeCtx (struct gdIOCtx * ctx);

	void init(stream_type * __stream) {
		getC = Getchar;
		putC = Putchar;
		getBuf = Getbuf;
		putBuf = Putbuf;
		tell = Tell;
		seek = Seek;
		gd_free = FreeCtx;
		_M_stream = __stream;
	}
private:
	stream_type *	_M_stream;
};
/** Allocate a new instance of the class
*/
inline gdIOCtx * gdNewOstreamCtx (std::ostream * __stream)
{
	return new ostreamIOCtx(* __stream);
}

#endif /* _gd_io_stream_h */
#endif /* __cplusplus */
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.