// Generated by gmmproc 2.66.3 -- DO NOT MODIFY!
#ifndef _GLIBMM_BYTES_H
#define _GLIBMM_BYTES_H
/* Copyright (C) 2012 The glibmm Development Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
*/
#include
#include
#include
#include
#include
#include
#ifndef DOXYGEN_SHOULD_SKIP_THIS
typedef struct _GBytes GBytes;
#endif
namespace Glib
{
//Note: The documentation is a reduced version of the C documentation,
//because this class is only really useful with other C types that we don't bother to wrap.
//We only wrap it because it is used in the InputStream, OutputStream and Resource APIs.
/** A simple refcounted data type representing an immutable byte sequence
* from an unspecified origin.
*
* The purpose of the Bytes class is to keep the memory region that it holds
* alive for as long as anyone holds a reference to the bytes. When
* the last reference count is dropped, the memory is released. Multiple
* unrelated callers can use byte data in the Bytes object without coordinating
* their activities, resting assured that the byte data will not change or
* move while they hold a reference.
*
* A Bytes object can come from many different origins that may have
* different procedures for freeing the memory region. Examples are
* memory from g_malloc(), from memory slices, from a GMappedFile or
* memory from other allocators.
*
* @newin{2,34}
*/
class GLIBMM_API Bytes final
{
public:
#ifndef DOXYGEN_SHOULD_SKIP_THIS
using CppObjectType = Bytes;
using BaseObjectType = GBytes;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
/** Increment the reference count for this object.
* You should never need to do this manually - use the object via a RefPtr instead.
*/
void reference() const;
/** Decrement the reference count for this object.
* You should never need to do this manually - use the object via a RefPtr instead.
*/
void unreference() const;
///Provides access to the underlying C instance.
GBytes* gobj();
///Provides access to the underlying C instance.
const GBytes* gobj() const;
///Provides access to the underlying C instance. The caller is responsible for unrefing it. Use when directly setting fields in structs.
GBytes* gobj_copy() const;
Bytes() = delete;
// noncopyable
Bytes(const Bytes&) = delete;
Bytes& operator=(const Bytes&) = delete;
protected:
// Do not derive this. Glib::Bytes can neither be constructed nor deleted.
void operator delete(void*, std::size_t);
private:
public:
static Glib::RefPtr create(gconstpointer data, gsize size);
/** Get the byte data in the Bytes. This data should not be modified.
*
* This function will always return the same pointer for a given Bytes.
*
* nullptr may be returned if @a size is 0. This is not guaranteed, as the Bytes
* may represent an empty string with @a data non-nullptr and @a size as 0. nullptr will
* not be returned if @a size is non-zero.
*
* @newin{2,32}
*
* @param size Location to return size of byte data.
* @return A pointer to the byte data, or nullptr.
*/
gconstpointer get_data(gsize& size) const;
/** Get the size of the byte data in the Bytes.
*
* This function will always return the same value for a given Bytes.
*
* @newin{2,32}
*
* @return The size.
*/
gsize get_size() const;
/** Creates an integer hash code for the byte data in the Bytes.
*
* This function can be passed to g_hash_table_new() as the @a key_hash_func
* parameter, when using non-nullptr Bytes pointers as keys in a HashTable.
*
* @newin{2,32}
*
* @param bytes A pointer to a Bytes key.
* @return A hash value corresponding to the key.
*/
static guint hash(gconstpointer bytes);
/** Compares the two Bytes values being pointed to and returns
* true if they are equal.
*
* This function can be passed to g_hash_table_new() as the @a key_equal_func
* parameter, when using non-nullptr Bytes pointers as keys in a HashTable.
*
* @newin{2,32}
*
* @param bytes1 A pointer to a Bytes.
* @param bytes2 A pointer to a Bytes to compare with @a bytes1.
* @return true if the two keys match.
*/
static bool equal(gconstpointer bytes1, gconstpointer bytes2);
/** Compares the two Bytes values.
*
* This function can be used to sort GBytes instances in lexicographical order.
*
* If @a bytes1 and @a bytes2 have different length but the shorter one is a
* prefix of the longer one then the shorter one is considered to be less than
* the longer one. Otherwise the first byte where both differ is used for
* comparison. If @a bytes1 has a smaller value at that position it is
* considered less, otherwise greater than @a bytes2.
*
* @newin{2,32}
*
* @param bytes1 A pointer to a Bytes.
* @param bytes2 A pointer to a Bytes to compare with @a bytes1.
* @return A negative value if @a bytes1 is less than @a bytes2, a positive value
* if @a bytes1 is greater than @a bytes2, and zero if @a bytes1 is equal to
* @a bytes2.
*/
static gint compare(gconstpointer bytes1, gconstpointer bytes2);
};
} // namespace Glib
namespace Glib
{
/** A Glib::wrap() method for this object.
*
* @param object The C instance.
* @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
* @result A C++ instance that wraps this C instance.
*
* @relates Glib::Bytes
*/
GLIBMM_API
Glib::RefPtr wrap(GBytes* object, bool take_copy = false);
} // namespace Glib
#endif /* _GLIBMM_BYTES_H */