// CkBinData.h: interface for the CkBinData class.
//
//////////////////////////////////////////////////////////////////////

// This header is generated for Chilkat 11.4.0

#define _CkVersion 11.4.0

#ifndef _CkBinData_H
#define _CkBinData_H
	
#include "chilkatDefs.h"
#include "CkString.h"
#include "CkMultiByteBase.h"

class CkByteData;
class CkStringBuilder;



#if !defined(__sun__) && !defined(__sun)
#pragma pack (push, 8)
#endif


#undef Copy

// CLASS: CkBinData
class CK_VISIBLE_PUBLIC CkBinData  : public CkMultiByteBase
{
    private:

	// Don't allow assignment or copying these objects.
	CkBinData(const CkBinData &);
	CkBinData &operator=(const CkBinData &);

    public:
	CkBinData(void);
	virtual ~CkBinData(void);

	static CkBinData *createNew(void);
	static CkBinData *createNew2(int progLang);
	void CK_VISIBLE_PRIVATE inject(void *impl);

	// May be called when finished with the object to free/dispose of any
	// internal resources held by the object. 
	void dispose(void);

	const unsigned char *getBinaryDataPtr(void);

unsigned long getSize(void);

		
	

	// BEGIN PUBLIC INTERFACE

	// ----------------------
	// Properties
	// ----------------------
	// The number of bytes contained within the object.
	int get_NumBytes(void);



	// ----------------------
	// Methods
	// ----------------------
	// Appends the contents of another BinData to this object.
	bool AppendBd(CkBinData &binData);


	// Appends binary data to the current contents, if any.
	bool AppendBinary(CkByteData &data);


	// Appends the appropriate BOM (byte order mark), also known as a preamble , for
	// the given charset. If the charset has no defined BOM, then nothing is appended. An
	// application would typically call this to append the utf-8, utf-16, or utf-32
	// BOM.
	bool AppendBom(const char *charset);


	// Appends a single byte. The byteValue should be a value from 0 to 255.
	bool AppendByte(int byteValue);


	// Appends a byte count followed by the string in the desired character encoding,
	// such as utf-8 . The numCountBytes is the size in bytes of the integer to represent the
	// byte count. If 0, then a minimal number of bytes is used. If bigEndian is true, the
	// byte count is appended in big endian byte ordering, otherwise little-ending byte
	// ordering. The str is the string to be appended. The charset is the character
	// encoding, such as utf-8 , utf-16 , windows-1252 , etc.
	bool AppendCountedString(int numCountBytes, bool bigEndian, const char *str, const char *charset);


	// Appends binary data to the current contents.
	bool AppendData(const void *data, int numBytes);


	// Appends encoded binary data to the current data. The encoding may be Base64 ,
	// modBase64 , base64Url , Base32 , Base58 , QP (for quoted-printable), URL (for
	// url-encoding), Hex , or any of the encodings found at Chilkat Binary Encodings
	// List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool AppendEncoded(const char *encData, const char *encoding);


	// Decodes the contents of sb and appends the decoded bytes to this object. The
	// encoding may be Base64 , modBase64 , base64Url , Base32 , Base58 , QP (for
	// quoted-printable), URL (for url-encoding), Hex , or any of the encodings found
	// at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool AppendEncodedSb(CkStringBuilder &sb, const char *encoding);


	// Appends a 16-bit integer (2 bytes). If littleEndian is true, then the integer bytes
	// are appended in little-endian byte order, otherwise big-endian byte order is
	// used.
	bool AppendInt2(int value, bool littleEndian);


	// Appends a 32-bit integer (4 bytes). If littleEndian is true, then the integer bytes
	// are appended in little-endian byte order, otherwise big-endian byte order is
	// used.
	bool AppendInt4(int value, bool littleEndian);


	// Appends a string to this object, padded to the fieldLen with NULL or SPACE chars. If
	// padWithSpace is true, then SPACE chars are used and the string is not null-terminated.
	// If fieldLen is false, then null bytes are used. The charset controls the byte
	// representation to use, such as utf-8 .
	// 
	// Note: This call will always append a total number of bytes equal to fieldLen. If the
	// str is longer than fieldLen, the method returns false to indicate failure and
	// nothing is appended.
	// 
	bool AppendPadded(const char *str, const char *charset, bool padWithSpace, int fieldLen);


	// Appends the contents of a StringBuilder to this object.
	bool AppendSb(CkStringBuilder &sb, const char *charset);


	// Appends a string to this object. (This does not append the BOM. If a BOM is
	// required, the AppendBom method can be called to append the appropriate BOM.)
	bool AppendString(const char *str, const char *charset);


	// Does either 16-bit or 32-bit byte swapping of the entire contents. If size
	// equals 16, then swaps in 2 bytes (e.g., 0x1234 → 0x3412). If size equals 32,
	// then swaps 4 bytes (e.g., 0x12345678 → 0x78563412)
	void ByteSwap(int size);


	// This method converts the character encoding of an object's contents from one
	// format to another, such as from Windows-1252 to UTF-8. The allOrNone parameter
	// determines error handling for unrepresentable bytes. If allOrNone is true, the
	// object's contents remain unchanged when errors occur. If false, error bytes
	// are discarded. The method returns true if successful and false if errors
	// occur.
	bool CharsetConvert(const char *fromCharset, const char *toCharset, bool allOrNone);


	// Clears the contents.
	bool Clear(void);


	// Return true if the contents of this object equals the contents of binData.
	bool ContentsEqual(CkBinData &binData);


	// Return the index where the first occurrence of str is found. Return -1 if not
	// found. The startIdx indicates the byte index where the search begins. The charset
	// specifies the byte representation of str that is to be searched. For example,
	// it can be utf-8 , windows-1252 , ansi , utf-16 , etc.
	int FindString(const char *str, int startIdx, const char *charset);


	// Retrieves the binary data contained within the object.
	bool GetBinary(CkByteData &outBytes);


	// Retrieves a chunk of the binary data contained within the object.
	bool GetBinaryChunk(int offset, int numBytes, CkByteData &outBytes);


	// Returns the value of the byte at the given index. The returned value is an
	// integer from 0 to 255.
	int GetByte(int index);


	// Retrieves the binary data contained within the object.
	const void *GetData(void);


	// Retrieves a chunk of the binary data contained within the object.
	const void *GetDataChunk(int offset, int numBytes);


	// Retrieves the binary data as an encoded string. The encoding may be Base64 ,
	// modBase64 , base64Url , Base32 , Base58 , QP (for quoted-printable), URL (for
	// url-encoding), Hex , or any of the encodings found at Chilkat Binary Encodings
	// List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool GetEncoded(const char *encoding, CkString &outStr);

	// Retrieves the binary data as an encoded string. The encoding may be Base64 ,
	// modBase64 , base64Url , Base32 , Base58 , QP (for quoted-printable), URL (for
	// url-encoding), Hex , or any of the encodings found at Chilkat Binary Encodings
	// List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	const char *getEncoded(const char *encoding);
	// Retrieves the binary data as an encoded string. The encoding may be Base64 ,
	// modBase64 , base64Url , Base32 , Base58 , QP (for quoted-printable), URL (for
	// url-encoding), Hex , or any of the encodings found at Chilkat Binary Encodings
	// List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	const char *encoded(const char *encoding);


	// Retrieves a chunk of the binary data and returns it in encoded form. The encoding
	// may be Base64 , modBase64 , base64Url , Base32 , Base58 , QP (for
	// quoted-printable), URL (for url-encoding), Hex , or any of the encodings found
	// at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool GetEncodedChunk(int offset, int numBytes, const char *encoding, CkString &outStr);

	// Retrieves a chunk of the binary data and returns it in encoded form. The encoding
	// may be Base64 , modBase64 , base64Url , Base32 , Base58 , QP (for
	// quoted-printable), URL (for url-encoding), Hex , or any of the encodings found
	// at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	const char *getEncodedChunk(int offset, int numBytes, const char *encoding);
	// Retrieves a chunk of the binary data and returns it in encoded form. The encoding
	// may be Base64 , modBase64 , base64Url , Base32 , Base58 , QP (for
	// quoted-printable), URL (for url-encoding), Hex , or any of the encodings found
	// at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	const char *encodedChunk(int offset, int numBytes, const char *encoding);


	// Writes the encoded data to a StringBuilder. The encoding may be Base64 , modBase64 ,
	// base64Url , Base32 , Base58 , QP (for quoted-printable), URL (for url-encoding),
	// Hex , or any of the encodings found at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool GetEncodedSb(const char *encoding, CkStringBuilder &sb);


	// Returns the hash of the contents of this object. The algorithm is the hash algorithm,
	// and can be sha1 , sha256 , sha384 , sha512 , sha3-224 , sha3-256 , sha3-384 ,
	// sha3-512 , md2 , md5 , ripemd128 , ripemd160 , ripemd256 , or ripemd320 . The
	// encoding can be base64 , modBase64 , base64Url , base32 , base58 , qp (for
	// quoted-printable), url (for url-encoding), hex , hexLower , or any of the
	// encodings found at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool GetHash(const char *algorithm, const char *encoding, CkString &outStr);

	// Returns the hash of the contents of this object. The algorithm is the hash algorithm,
	// and can be sha1 , sha256 , sha384 , sha512 , sha3-224 , sha3-256 , sha3-384 ,
	// sha3-512 , md2 , md5 , ripemd128 , ripemd160 , ripemd256 , or ripemd320 . The
	// encoding can be base64 , modBase64 , base64Url , base32 , base58 , qp (for
	// quoted-printable), url (for url-encoding), hex , hexLower , or any of the
	// encodings found at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	const char *getHash(const char *algorithm, const char *encoding);
	// Returns the hash of the contents of this object. The algorithm is the hash algorithm,
	// and can be sha1 , sha256 , sha384 , sha512 , sha3-224 , sha3-256 , sha3-384 ,
	// sha3-512 , md2 , md5 , ripemd128 , ripemd160 , ripemd256 , or ripemd320 . The
	// encoding can be base64 , modBase64 , base64Url , base32 , base58 , qp (for
	// quoted-printable), url (for url-encoding), hex , hexLower , or any of the
	// encodings found at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	const char *hash(const char *algorithm, const char *encoding);


	// Returns the value of the 16-bit signed integer stored in big-endian or
	// little-endian byte ordering at the given index.
	int GetInt2(int index, bool littleEndian);


	// Returns the value of the 32-bit signed integer stored in big-endian or
	// little-endian byte ordering at the given index.
	int GetInt4(int index, bool littleEndian);


	// Interprets the bytes according to charset and returns the string. The charset can be
	// utf-8 , utf-16 , ansi , iso-8859-* , windows-125* , or any of the supported
	// character encodings listed in the link below.
	bool GetString(const char *charset, CkString &outStr);

	// Interprets the bytes according to charset and returns the string. The charset can be
	// utf-8 , utf-16 , ansi , iso-8859-* , windows-125* , or any of the supported
	// character encodings listed in the link below.
	const char *getString(const char *charset);
	// Interprets the bytes according to charset and returns the string. The charset can be
	// utf-8 , utf-16 , ansi , iso-8859-* , windows-125* , or any of the supported
	// character encodings listed in the link below.
	const char *string(const char *charset);


	// Returns numBytes bytes starting at startIdx. The bytes are interpreted according to charset
	// (for example, utf-8 , ansi , utf-16 , windows-1252 , etc.)
	bool GetTextChunk(int startIdx, int numBytes, const char *charset, CkString &outStr);

	// Returns numBytes bytes starting at startIdx. The bytes are interpreted according to charset
	// (for example, utf-8 , ansi , utf-16 , windows-1252 , etc.)
	const char *getTextChunk(int startIdx, int numBytes, const char *charset);
	// Returns numBytes bytes starting at startIdx. The bytes are interpreted according to charset
	// (for example, utf-8 , ansi , utf-16 , windows-1252 , etc.)
	const char *textChunk(int startIdx, int numBytes, const char *charset);


	// Returns the value of the 16-bit unsigned integer stored in big-endian or
	// little-endian byte ordering at the given index.
	unsigned long GetUInt2(int index, bool littleEndian);


	// Returns the value of the 32-bit unsigned integer stored in big-endian or
	// little-endian byte ordering at the given index.
	unsigned long GetUInt4(int index, bool littleEndian);


	// Returns true if this object contains valid utf-8 byte sequences. Any invalid
	// byte sequence that is not valid utf-8 will cause this function to return
	// false.
	bool IsValidUtf8(void);


	// Loads binary data and replaces the current contents, if any.
	bool LoadBinary(CkByteData &data);


	// Loads binary data from an encoded string, replacing the current contents, if
	// any. The encoding may be Base64 , modBase64 , base64Url , Base32 , Base58 , QP (for
	// quoted-printable), URL (for url-encoding), Hex , or any of the encodings found
	// at Chilkat Binary Encodings List.
	// 
	// References:
	// 1: https://www.chilkatsoft.com/binary_encodings.asp
	bool LoadEncoded(const char *encData, const char *encoding);


	// Loads data from a file.
	bool LoadFile(const char *path);


	// Removes bytes having a specified value (0-255). For example, to remove all null
	// bytes, pass 0 in value.
	void RemoveByteVal(int value);


	// Removes a chunk of bytes from the binary data.
	bool RemoveChunk(int offset, int numBytes);


	// Securely clears the contents by writing 0 bytes to the memory prior to
	// deallocating the internal memory.
	bool SecureClear(void);


	// Appends the contents of this object to a file.
	bool WriteAppendFile(const char *path);


	// Writes the contents to a file.
	bool WriteFile(const char *path);






	// END PUBLIC INTERFACE


};
#if !defined(__sun__) && !defined(__sun)
#pragma pack (pop)
#endif
	
#endif
