#ifndef _FS_PDFOBJECT_C_H_
#define _FS_PDFOBJECT_C_H_

#ifdef __cplusplus
extern "C" {
#endif



typedef enum _FSPDFObjectType {
e_FSInvalidType = 0,
e_FSBoolean = 1,
e_FSNumber = 2,
e_FSString = 3,
e_FSName = 4,
e_FSArray = 5,
e_FSDictionary = 6,
e_FSStream = 7,
e_FSNull = 8,
e_FSReference = 9,
}FSPDFObjectType;



typedef enum _FSPDFObjectFilter {
e_FSPDFObjectFilterUnknown = -1,
e_FSNoneDecode = 0,
e_FSASCIIHexDecode = 1,
e_FSASCII85Decode = 2,
e_FSLZWDecode = 3,
e_FSFlateDecode = 4,
e_FSRunLengthDecode = 5,
e_FSCCITTFaxDecode = 6,
e_FSJBIG2Decode = 7,
e_FSDCTDecode = 8,
e_FSJPXDecode = 9,
e_FSCrypt = 10,
}FSPDFObjectFilter;


FSErrorCode FSDK_PDFObject_CreateFromBoolean(FS_BOOL boolean_value, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromFloat(float float_value, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromInteger(int integer_value, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromString(const wchar_t* string_value, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromString0(const wchar_t* string_value, int length, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromNameW(const wchar_t* name, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromName(const char* name, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateFromDateTime(const FSDateTime date_time, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_CreateReference(FS_PDFDOC_HANDLE document, FS_UINT32 object_number, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_Release(FS_PDFOBJECT_HANDLE pdfobject_handle);
FSErrorCode FSDK_PDFObject_CloneObject(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_DeepCloneObject(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_IsIdentical(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFOBJECT_HANDLE pdf_obj, FS_BOOL* return_value);
FSErrorCode FSDK_PDFObject_GetType(FS_PDFOBJECT_HANDLE pdfobject_handle, FSPDFObjectType* return_value);
FSErrorCode FSDK_PDFObject_GetObjNum(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_UINT32* return_value);
FSErrorCode FSDK_PDFObject_GetInteger(FS_PDFOBJECT_HANDLE pdfobject_handle, int* return_value);
FSErrorCode FSDK_PDFObject_GetFloat(FS_PDFOBJECT_HANDLE pdfobject_handle, float* return_value);
FSErrorCode FSDK_PDFObject_GetBoolean(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_BOOL* return_value);
FSErrorCode FSDK_PDFObject_GetMatrix(FS_PDFOBJECT_HANDLE pdfobject_handle, FSMatrix* return_value);
FSErrorCode FSDK_PDFObject_GetRect(FS_PDFOBJECT_HANDLE pdfobject_handle, FSRectF* return_value);
FSErrorCode FSDK_PDFObject_GetDirectObject(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_GetDateTime(FS_PDFOBJECT_HANDLE pdfobject_handle, FSDateTime* return_value);
FSErrorCode FSDK_PDFObject_GetName(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_BSTR* return_value);
FSErrorCode FSDK_PDFObject_GetString(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_BSTR* return_value);
FSErrorCode FSDK_PDFObject_GetWideString(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_WSTR* return_value);
FSErrorCode FSDK_PDFObject_GetArray(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFARRAY_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_GetDict(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFDICTIONARY_HANDLE* return_value);
FSErrorCode FSDK_PDFObject_GetStream(FS_PDFOBJECT_HANDLE pdfobject_handle, FS_PDFSTREAM_HANDLE* return_value);
FSErrorCode FSDK_PDFStream_Create(FS_PDFDICTIONARY_HANDLE dictionary, FS_PDFSTREAM_HANDLE* return_value);
FSErrorCode FSDK_PDFStream_GetDictionary(FS_PDFSTREAM_HANDLE pdfstream_handle, FS_PDFDICTIONARY_HANDLE* return_value);
FSErrorCode FSDK_PDFStream_GetStreamFilter(FS_PDFSTREAM_HANDLE pdfstream_handle, FSPDFObjectFilter* return_value);
FSErrorCode FSDK_PDFStream_GetDataSize(FS_PDFSTREAM_HANDLE pdfstream_handle, FS_BOOL is_raw_data, FS_UINT64* return_value);
FSErrorCode FSDK_PDFStream_GetData(FS_PDFSTREAM_HANDLE pdfstream_handle, FS_BOOL is_raw_data, size_t size, void* out_buffer, FS_BOOL* return_value);
FSErrorCode FSDK_PDFStream_SetData(FS_PDFSTREAM_HANDLE pdfstream_handle, const void* buffer, size_t size);
FSErrorCode FSDK_PDFStream_ImportData(FS_PDFSTREAM_HANDLE pdfstream_handle,  FSReaderCallback* file_read, FSPDFObjectFilter stream_filter);
FSErrorCode FSDK_PDFStream_ExportData(FS_PDFSTREAM_HANDLE pdfstream_handle, FS_BOOL is_raw_data, FSReaderCallback* return_value);
FSErrorCode FSDK_PDFArray_Create(FS_PDFARRAY_HANDLE* return_value);
FSErrorCode FSDK_PDFArray_CreateFromMatrix(const FSMatrix matrix, FS_PDFARRAY_HANDLE* return_value);
FSErrorCode FSDK_PDFArray_CreateFromRect(const FSRectF rect, FS_PDFARRAY_HANDLE* return_value);
FSErrorCode FSDK_PDFArray_GetElementCount(FS_PDFARRAY_HANDLE pdfarray_handle, int* return_value);
FSErrorCode FSDK_PDFArray_GetElement(FS_PDFARRAY_HANDLE pdfarray_handle, int index, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFArray_AddElement(FS_PDFARRAY_HANDLE pdfarray_handle, FS_PDFOBJECT_HANDLE element);
FSErrorCode FSDK_PDFArray_AddBoolean(FS_PDFARRAY_HANDLE pdfarray_handle, FS_BOOL boolean_value);
FSErrorCode FSDK_PDFArray_AddDateTime(FS_PDFARRAY_HANDLE pdfarray_handle, const FSDateTime date_time);
FSErrorCode FSDK_PDFArray_AddFloat(FS_PDFARRAY_HANDLE pdfarray_handle, float float_value);
FSErrorCode FSDK_PDFArray_AddInteger(FS_PDFARRAY_HANDLE pdfarray_handle, int integer_value);
FSErrorCode FSDK_PDFArray_AddMatrix(FS_PDFARRAY_HANDLE pdfarray_handle, const FSMatrix matrix);
FSErrorCode FSDK_PDFArray_AddRect(FS_PDFARRAY_HANDLE pdfarray_handle, const FSRectF rect);
FSErrorCode FSDK_PDFArray_AddName(FS_PDFARRAY_HANDLE pdfarray_handle, const char* name);
FSErrorCode FSDK_PDFArray_AddString(FS_PDFARRAY_HANDLE pdfarray_handle, const wchar_t* new_string);
FSErrorCode FSDK_PDFArray_InsertAt(FS_PDFARRAY_HANDLE pdfarray_handle, int index, FS_PDFOBJECT_HANDLE element);
FSErrorCode FSDK_PDFArray_SetAt(FS_PDFARRAY_HANDLE pdfarray_handle, int index, FS_PDFOBJECT_HANDLE element);
FSErrorCode FSDK_PDFArray_RemoveAt(FS_PDFARRAY_HANDLE pdfarray_handle, int index);
FSErrorCode FSDK_PDFArray_AddReference(FS_PDFARRAY_HANDLE pdfarray_handle, FS_PDFOBJECT_HANDLE pdf_object, FS_PDFDOC_HANDLE document);
FSErrorCode FSDK_PDFDictionary_Create(FS_PDFDICTIONARY_HANDLE* return_value);
FSErrorCode FSDK_PDFDictionary_HasKey(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, FS_BOOL* return_value);
FSErrorCode FSDK_PDFDictionary_GetElement(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFDictionary_MoveNext(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, FS_POSITION position, FS_POSITION* return_value);
FSErrorCode FSDK_PDFDictionary_GetKey(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, FS_POSITION position, FS_BSTR* return_value);
FSErrorCode FSDK_PDFDictionary_GetValue(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, FS_POSITION position, FS_PDFOBJECT_HANDLE* return_value);
FSErrorCode FSDK_PDFDictionary_SetAt(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, FS_PDFOBJECT_HANDLE pdf_object);
FSErrorCode FSDK_PDFDictionary_SetAtReference(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, FS_PDFOBJECT_HANDLE pdf_object, FS_PDFDOC_HANDLE document);
FSErrorCode FSDK_PDFDictionary_SetAtBoolean(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, FS_BOOL value);
FSErrorCode FSDK_PDFDictionary_SetAtDateTime(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, const FSDateTime value);
FSErrorCode FSDK_PDFDictionary_SetAtFloat(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, float value);
FSErrorCode FSDK_PDFDictionary_SetAtInteger(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, int value);
FSErrorCode FSDK_PDFDictionary_SetAtMatrix(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, const FSMatrix value);
FSErrorCode FSDK_PDFDictionary_SetAtRect(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, const FSRectF value);
FSErrorCode FSDK_PDFDictionary_SetAtName(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, const char* value);
FSErrorCode FSDK_PDFDictionary_SetAtString(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key, const wchar_t* value);
FSErrorCode FSDK_PDFDictionary_RemoveAt(FS_PDFDICTIONARY_HANDLE pdfdictionary_handle, const char* key);
#ifdef __cplusplus
}
#endif
#endif
