Home | History | Annotate | Download | only in source
      1 /*****************************************************************************/
      2 // Copyright 2006-2007 Adobe Systems Incorporated
      3 // All Rights Reserved.
      4 //
      5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
      6 // accordance with the terms of the Adobe license agreement accompanying it.
      7 /*****************************************************************************/
      8 
      9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_memory_stream.h#2 $ */
     10 /* $DateTime: 2012/07/31 22:04:34 $ */
     11 /* $Change: 840853 $ */
     12 /* $Author: tknoll $ */
     13 
     14 /** \file
     15  * Stream abstraction to/from in-memory data.
     16  */
     17 
     18 /*****************************************************************************/
     19 
     20 #ifndef __dng_memory_stream__
     21 #define __dng_memory_stream__
     22 
     23 /*****************************************************************************/
     24 
     25 #include "dng_stream.h"
     26 
     27 /*****************************************************************************/
     28 
     29 /// \brief A dng_stream which can be read from or written to memory.
     30 ///
     31 /// Stream is populated via writing and either read or accessed by asking for contents as a pointer.
     32 
     33 class dng_memory_stream: public dng_stream
     34 	{
     35 
     36 	protected:
     37 
     38 		dng_memory_allocator &fAllocator;
     39 
     40 		uint32 fPageSize;
     41 
     42 		uint32 fPageCount;
     43 		uint32 fPagesAllocated;
     44 
     45 		dng_memory_block **fPageList;
     46 
     47 		uint64 fMemoryStreamLength;
     48 
     49 	public:
     50 
     51 		/// Construct a new memory-based stream.
     52 		/// \param allocator Allocator to use to allocate memory in stream as needed.
     53 		/// \param sniffer If non-NULL used to check for user cancellation.
     54 		/// \param pageSize Unit of allocation for data stored in stream.
     55 
     56 		dng_memory_stream (dng_memory_allocator &allocator,
     57 						   dng_abort_sniffer *sniffer = NULL,
     58 						   uint32 pageSize = 64 * 1024);
     59 
     60 		virtual ~dng_memory_stream ();
     61 
     62 		/// Copy a specified number of bytes to a target stream.
     63 		/// \param dstStream The target stream.
     64 		/// \param count The number of bytes to copy.
     65 
     66 		virtual void CopyToStream (dng_stream &dstStream,
     67 								   uint64 count);
     68 
     69 	protected:
     70 
     71 		virtual uint64 DoGetLength ();
     72 
     73 		virtual void DoRead (void *data,
     74 							 uint32 count,
     75 							 uint64 offset);
     76 
     77 		virtual void DoSetLength (uint64 length);
     78 
     79 		virtual void DoWrite (const void *data,
     80 							  uint32 count,
     81 							  uint64 offset);
     82 
     83 	private:
     84 
     85 		// Hidden copy constructor and assignment operator.
     86 
     87 		dng_memory_stream (const dng_memory_stream &stream);
     88 
     89 		dng_memory_stream & operator= (const dng_memory_stream &stream);
     90 
     91 	};
     92 
     93 /*****************************************************************************/
     94 
     95 #endif
     96 
     97 /*****************************************************************************/
     98