1/*
2  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization
3  dedicated to making software imaging solutions freely available.
4
5  You may not use this file except in compliance with the License.
6  obtain a copy of the License at
7
8    http://www.imagemagick.org/script/license.php
9
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15
16  MagickCore Binary Large OBjects private methods.
17*/
18#ifndef MAGICKCORE_BLOB_PRIVATE_H
19#define MAGICKCORE_BLOB_PRIVATE_H
20
21#include "MagickCore/image.h"
22#include "MagickCore/stream.h"
23#include "MagickCore/nt-base-private.h"
24
25#if defined(__cplusplus) || defined(c_plusplus)
26extern "C" {
27#endif
28
29#define MagickMinBlobExtent  32767L
30#if defined(MAGICKCORE_HAVE_FSEEKO)
31# define fseek  fseeko
32# define ftell  ftello
33#endif
34
35typedef enum
36{
37  UndefinedBlobMode,
38  ReadBlobMode,
39  ReadBinaryBlobMode,
40  WriteBlobMode,
41  WriteBinaryBlobMode,
42  AppendBlobMode,
43  AppendBinaryBlobMode
44} BlobMode;
45
46typedef enum
47{
48  UndefinedStream,
49  FileStream,
50  StandardStream,
51  PipeStream,
52  ZipStream,
53  BZipStream,
54  FifoStream,
55  BlobStream
56} StreamType;
57
58typedef int
59  *(*BlobFifo)(const Image *,const void *,const size_t);
60
61extern MagickExport BlobInfo
62  *CloneBlobInfo(const BlobInfo *),
63  *ReferenceBlob(BlobInfo *);
64
65extern MagickExport char
66  *ReadBlobString(Image *,char *);
67
68extern MagickExport const struct stat
69  *GetBlobProperties(const Image *);
70
71extern MagickExport const void
72  *ReadBlobStream(Image *,const size_t,void *,ssize_t *);
73
74extern MagickExport double
75  ReadBlobDouble(Image *);
76
77extern MagickExport float
78  ReadBlobFloat(Image *);
79
80extern MagickExport int
81  EOFBlob(const Image *),
82  ReadBlobByte(Image *);
83
84extern MagickExport MagickBooleanType
85  CloseBlob(Image *),
86  DiscardBlobBytes(Image *,const MagickSizeType),
87  OpenBlob(const ImageInfo *,Image *,const BlobMode,ExceptionInfo *),
88  SetBlobExtent(Image *,const MagickSizeType),
89  UnmapBlob(void *,const size_t);
90
91extern MagickExport MagickOffsetType
92  SeekBlob(Image *,const MagickOffsetType,const int),
93  TellBlob(const Image *);
94
95extern MagickExport MagickSizeType
96  ReadBlobLongLong(Image *),
97  ReadBlobMSBLongLong(Image *);
98
99extern MagickExport signed int
100  ReadBlobLSBSignedLong(Image *),
101  ReadBlobMSBSignedLong(Image *),
102  ReadBlobSignedLong(Image *);
103
104extern MagickExport signed short
105  ReadBlobLSBSignedShort(Image *),
106  ReadBlobMSBSignedShort(Image *),
107  ReadBlobSignedShort(Image *);
108
109extern MagickExport ssize_t
110  ReadBlob(Image *,const size_t,void *),
111  WriteBlob(Image *,const size_t,const void *),
112  WriteBlobByte(Image *,const unsigned char),
113  WriteBlobFloat(Image *,const float),
114  WriteBlobLong(Image *,const unsigned int),
115  WriteBlobShort(Image *,const unsigned short),
116  WriteBlobLSBLong(Image *,const unsigned int),
117  WriteBlobLSBShort(Image *,const unsigned short),
118  WriteBlobLSBSignedLong(Image *,const signed int),
119  WriteBlobLSBSignedShort(Image *,const signed short),
120  WriteBlobMSBLong(Image *,const unsigned int),
121  WriteBlobMSBLongLong(Image *,const MagickSizeType),
122  WriteBlobMSBShort(Image *,const unsigned short),
123  WriteBlobMSBSignedLong(Image *,const signed int),
124  WriteBlobMSBSignedShort(Image *,const signed short),
125  WriteBlobString(Image *,const char *);
126
127extern MagickExport unsigned int
128  ReadBlobLong(Image *),
129  ReadBlobLSBLong(Image *),
130  ReadBlobMSBLong(Image *);
131
132extern MagickExport unsigned short
133  ReadBlobShort(Image *),
134  ReadBlobLSBShort(Image *),
135  ReadBlobMSBShort(Image *);
136
137extern MagickExport void
138  AttachBlob(BlobInfo *,const void *,const size_t),
139  *DetachBlob(BlobInfo *),
140  DisassociateBlob(Image *),
141  GetBlobInfo(BlobInfo *),
142  *MapBlob(int,const MapMode,const MagickOffsetType,const size_t),
143  MSBOrderLong(unsigned char *,const size_t),
144  MSBOrderShort(unsigned char *,const size_t);
145
146#if defined(__cplusplus) || defined(c_plusplus)
147}
148#endif
149
150#endif
151