/*
- Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization
+ Copyright 1999-2017 ImageMagick Studio LLC, a non-profit organization
dedicated to making software imaging solutions freely available.
You may not use this file except in compliance with the License.
MagickCore Binary Large OBjects methods.
*/
-#ifndef _MAGICKCORE_BLOB_H
-#define _MAGICKCORE_BLOB_H
-
-#include "MagickCore/image.h"
-#include "MagickCore/stream.h"
+#ifndef MAGICKCORE_BLOB_H
+#define MAGICKCORE_BLOB_H
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#define MagickMaxBufferExtent 81920
-typedef enum
-{
- UndefinedBlobMode,
- ReadBlobMode,
- ReadBinaryBlobMode,
- WriteBlobMode,
- WriteBinaryBlobMode,
- AppendBlobMode,
- AppendBinaryBlobMode
-} BlobMode;
-
typedef enum
{
ReadMode,
IOMode
} MapMode;
-typedef int
- *(*BlobFifo)(const Image *,const void *,const size_t);
+typedef ssize_t
+ (*BlobHandler)(const unsigned char *,const size_t,const void *);
-extern MagickExport BlobInfo
- *CloneBlobInfo(const BlobInfo *),
- *ReferenceBlob(BlobInfo *);
+typedef size_t
+ (*BlobSeeker)(const MagickOffsetType offset,const int whence,const void *);
-extern MagickExport char
- *ReadBlobString(Image *,char *);
+typedef MagickOffsetType
+ (*BlobTeller)(const void *);
-extern MagickExport const void
- *ReadBlobStream(Image *,const size_t,void *,ssize_t *);
+typedef struct _CustomStreamInfo
+{
+ BlobHandler
+ reader,
+ writer;
+
+ BlobSeeker
+ seeker;
+
+ BlobTeller
+ teller;
+
+ void
+ *data;
+} CustomStreamInfo;
+
+#include "MagickCore/image.h"
+#include "MagickCore/stream.h"
-extern MagickExport double
- ReadBlobDouble(Image *);
extern MagickExport FILE
*GetBlobFileHandle(const Image *);
-extern MagickExport float
- ReadBlobFloat(Image *);
-
extern MagickExport Image
*BlobToImage(const ImageInfo *,const void *,const size_t,ExceptionInfo *),
- *PingBlob(const ImageInfo *,const void *,const size_t,ExceptionInfo *);
-
-extern MagickExport int
- EOFBlob(const Image *),
- ReadBlobByte(Image *);
+ *PingBlob(const ImageInfo *,const void *,const size_t,ExceptionInfo *),
+ *CustomStreamToImage(const ImageInfo *,CustomStreamInfo *,ExceptionInfo *);
extern MagickExport MagickBooleanType
BlobToFile(char *,const void *,const size_t,ExceptionInfo *),
- CloseBlob(Image *),
- DiscardBlobBytes(Image *,const MagickSizeType),
FileToImage(Image *,const char *,ExceptionInfo *),
+ GetBlobError(const Image *),
ImageToFile(Image *,char *,ExceptionInfo *),
InjectImageBlob(const ImageInfo *,Image *,Image *,const char *,
ExceptionInfo *),
- OpenBlob(const ImageInfo *,Image *,const BlobMode,ExceptionInfo *),
- UnmapBlob(void *,const size_t);
-
-extern MagickExport MagickOffsetType
- SeekBlob(Image *,const MagickOffsetType,const int),
- TellBlob(const Image *);
+ IsBlobExempt(const Image *),
+ IsBlobSeekable(const Image *),
+ IsBlobTemporary(const Image *);
extern MagickExport MagickSizeType
- GetBlobSize(const Image *),
- ReadBlobLongLong(Image *),
- ReadBlobMSBLongLong(Image *);
-
-extern MagickExport ssize_t
- ReadBlob(Image *,const size_t,void *),
- WriteBlob(Image *,const size_t,const void *),
- WriteBlobByte(Image *,const unsigned char),
- WriteBlobFloat(Image *,const float),
- WriteBlobLong(Image *,const unsigned int),
- WriteBlobShort(Image *,const unsigned short),
- WriteBlobLSBLong(Image *,const unsigned int),
- WriteBlobLSBShort(Image *,const unsigned short),
- WriteBlobMSBLong(Image *,const unsigned int),
- WriteBlobMSBLongLong(Image *,const MagickSizeType),
- WriteBlobMSBShort(Image *,const unsigned short),
- WriteBlobString(Image *,const char *);
-
-extern MagickExport unsigned int
- ReadBlobLong(Image *),
- ReadBlobLSBLong(Image *),
- ReadBlobMSBLong(Image *);
-
-extern MagickExport unsigned short
- ReadBlobShort(Image *),
- ReadBlobLSBShort(Image *),
- ReadBlobMSBShort(Image *);
+ GetBlobSize(const Image *);
+
+extern MagickExport StreamHandler
+ GetBlobStreamHandler(const Image *);
extern MagickExport void
- AttachBlob(BlobInfo *,const void *,const size_t),
+ *GetBlobStreamData(const Image *),
DestroyBlob(Image *),
- *DetachBlob(BlobInfo *),
DuplicateBlob(Image *,const Image *),
- *GetBlobStreamData(const Image *),
*FileToBlob(const char *,const size_t,size_t *,ExceptionInfo *),
*ImageToBlob(const ImageInfo *,Image *,size_t *,ExceptionInfo *),
+ ImageToCustomStream(const ImageInfo *,Image *,CustomStreamInfo *,
+ ExceptionInfo *),
*ImagesToBlob(const ImageInfo *,Image *,size_t *,ExceptionInfo *),
- *MapBlob(int,const MapMode,const MagickOffsetType,const size_t),
- MSBOrderLong(unsigned char *,const size_t),
- MSBOrderShort(unsigned char *,const size_t);
+ ImagesToCustomStream(const ImageInfo *,Image *,CustomStreamInfo *,
+ ExceptionInfo *),
+ SetBlobExempt(Image *,const MagickBooleanType);
#if defined(__cplusplus) || defined(c_plusplus)
}