����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/1630575/root/proc/1630575/root/proc/self/root/proc/thread-self/root/usr/include/vips/ |
Upload File : |
/* abstract base class for all vips objects
*/
/*
Copyright (C) 1991-2003 The National Gallery
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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
*/
/*
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
*/
#ifndef VIPS_OBJECT_H
#define VIPS_OBJECT_H
#include <glib.h>
#include <glib-object.h>
#include <vips/buf.h>
#include <vips/basic.h>
#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/
/* Handy!
*/
#ifdef VIPS_DEBUG
#define VIPS_UNREF(X) \
G_STMT_START \
{ \
if (X) { \
g_assert(G_OBJECT(X)->ref_count > 0); \
g_object_unref(X); \
(X) = 0; \
} \
} \
G_STMT_END
#else /*!VIPS_DEBUG*/
#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
#endif /*VIPS_DEBUG*/
typedef struct _VipsObject VipsObject;
typedef struct _VipsObjectClass VipsObjectClass;
/* Track extra stuff for arguments to objects
*/
typedef enum /*< flags >*/ {
VIPS_ARGUMENT_NONE = 0,
VIPS_ARGUMENT_REQUIRED = 1,
VIPS_ARGUMENT_CONSTRUCT = 2,
VIPS_ARGUMENT_SET_ONCE = 4,
VIPS_ARGUMENT_SET_ALWAYS = 8,
VIPS_ARGUMENT_INPUT = 16,
VIPS_ARGUMENT_OUTPUT = 32,
VIPS_ARGUMENT_DEPRECATED = 64,
VIPS_ARGUMENT_MODIFY = 128,
VIPS_ARGUMENT_NON_HASHABLE = 256
} VipsArgumentFlags;
/* Useful flag combinations. User-visible ones are:
*
* VIPS_ARGUMENT_REQUIRED_INPUT Eg. the "left" argument for an add operation
*
* VIPS_ARGUMENT_OPTIONAL_INPUT Eg. the "caption" for an object
*
* VIPS_ARGUMENT_REQUIRED_OUTPUT Eg. the "result" of an add operation
*
* VIPS_ARGUMENT_OPTIONAL_OUTPUT Eg. the x pos of the image minimum
*
* Other combinations are used internally, eg. supplying the cast-table for an
* arithmetic operation
*/
#define VIPS_ARGUMENT_REQUIRED_INPUT \
(VIPS_ARGUMENT_INPUT | \
VIPS_ARGUMENT_REQUIRED | \
VIPS_ARGUMENT_CONSTRUCT)
#define VIPS_ARGUMENT_OPTIONAL_INPUT \
(VIPS_ARGUMENT_INPUT | \
VIPS_ARGUMENT_CONSTRUCT)
#define VIPS_ARGUMENT_REQUIRED_OUTPUT \
(VIPS_ARGUMENT_OUTPUT | \
VIPS_ARGUMENT_REQUIRED | \
VIPS_ARGUMENT_CONSTRUCT)
#define VIPS_ARGUMENT_OPTIONAL_OUTPUT \
(VIPS_ARGUMENT_OUTPUT | \
VIPS_ARGUMENT_CONSTRUCT)
#define VIPS_ARG_IMAGE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_object((NAME), (LONG), (DESC), \
VIPS_TYPE_IMAGE, \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, TYPE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_object((NAME), (LONG), (DESC), \
TYPE, \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_INTERPOLATE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \
VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
#define VIPS_ARG_BOOL(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
(VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_DOUBLE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, MIN, MAX, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_double((NAME), (LONG), (DESC), \
(MIN), (MAX), (VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_BOXED(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, TYPE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
(TYPE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_INT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, MIN, MAX, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_int((NAME), (LONG), (DESC), \
(MIN), (MAX), (VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_UINT64(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, MIN, MAX, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \
(MIN), (MAX), (VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_ENUM(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, TYPE, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
(TYPE), (VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_FLAGS(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, TYPE, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
(TYPE), (VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_STRING(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VALUE) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_string((NAME), (LONG), (DESC), \
(VALUE), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
#define VIPS_ARG_POINTER(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \
{ \
GParamSpec *pspec; \
\
pspec = g_param_spec_pointer((NAME), (LONG), (DESC), \
(GParamFlags) (G_PARAM_READWRITE)); \
g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
vips_argument_get_id(), pspec); \
vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
}
/* Keep one of these for every argument.
*/
typedef struct _VipsArgument {
GParamSpec *pspec; /* pspec for this argument */
/* More stuff, see below */
} VipsArgument;
/* Keep one of these in the class struct for every argument.
*/
typedef struct _VipsArgumentClass {
VipsArgument parent;
/* The class of the object we are an arg for.
*/
VipsObjectClass *object_class;
VipsArgumentFlags flags;
int priority; /* Order args by this */
guint offset; /* G_STRUCT_OFFSET of member in object */
} VipsArgumentClass;
/* Keep one of these in the object struct for every argument instance.
*/
typedef struct _VipsArgumentInstance {
VipsArgument parent;
/* The class we are part of.
*/
VipsArgumentClass *argument_class;
/* The object we are attached to.
*/
VipsObject *object;
/* Has been set.
*/
gboolean assigned;
/* If this is an output argument, keep the id of our "close" handler
* here.
*/
gulong close_id;
/* We need to listen for "invalidate" on input images and send our own
* "invalidate" out. If we go, we need to disconnect.
*/
gulong invalidate_id;
} VipsArgumentInstance;
/* Need to look up our VipsArgument structs from a pspec. Just hash the
* pointer (ie. we assume pspecs are never shared, is this correct?)
*/
typedef GHashTable VipsArgumentTable;
VIPS_API
int vips_argument_get_id(void);
#ifndef __GI_SCANNER__
void vips__object_set_member(VipsObject *object, GParamSpec *pspec,
GObject **member, GObject *argument);
#endif /* !__GI_SCANNER__ */
typedef void *(*VipsArgumentMapFn)(VipsObject *object, GParamSpec *pspec,
VipsArgumentClass *argument_class,
VipsArgumentInstance *argument_instance, void *a, void *b);
VIPS_API
void *vips_argument_map(VipsObject *object,
VipsArgumentMapFn fn, void *a, void *b);
VIPS_API
int vips_object_get_args(VipsObject *object,
const char ***names, int **flags, int *n_args);
typedef void *(*VipsArgumentClassMapFn)(VipsObjectClass *object_class,
GParamSpec *pspec,
VipsArgumentClass *argument_class, void *a, void *b);
VIPS_API
void *vips_argument_class_map(VipsObjectClass *object_class,
VipsArgumentClassMapFn fn, void *a, void *b);
VIPS_API
gboolean vips_argument_class_needsstring(VipsArgumentClass *argument_class);
VIPS_API
int vips_object_get_argument(VipsObject *object, const char *name,
GParamSpec **pspec,
VipsArgumentClass **argument_class,
VipsArgumentInstance **argument_instance);
VIPS_API
gboolean vips_object_argument_isset(VipsObject *object, const char *name);
VIPS_API
VipsArgumentFlags vips_object_get_argument_flags(VipsObject *object,
const char *name);
VIPS_API
int vips_object_get_argument_priority(VipsObject *object, const char *name);
/* We have to loop over an objects args in several places, and we can't always
* use vips_argument_map(), the preferred looper. Have the loop code as a
* macro as well for these odd cases.
*/
#define VIPS_ARGUMENT_FOR_ALL(OBJECT, PSPEC, ARG_CLASS, ARG_INSTANCE) \
{ \
VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
GSList *p; \
\
for (p = object_class->argument_table_traverse; p; p = p->next) { \
VipsArgumentClass *ARG_CLASS = \
(VipsArgumentClass *) p->data; \
VipsArgument *argument = (VipsArgument *) argument_class; \
GParamSpec *PSPEC = argument->pspec; \
VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
vips__argument_get_instance(argument_class, \
VIPS_OBJECT(OBJECT));
#define VIPS_ARGUMENT_FOR_ALL_END \
} \
}
/* And some macros to collect args from a va list.
*
* Use something like this:
*
* GParamSpec *pspec;
* VipsArgumentClass *argument_class;
* VipsArgumentInstance *argument_instance;
*
* if (vips_object_get_argument(VIPS_OBJECT(operation), name,
* &pspec, &argument_class, &argument_instance))
* return -1;
*
* VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
*
* GValue value holds the value of an input argument, do
* something with it
*
* VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
*
* void **arg points to where to write an output argument
*
* VIPS_ARGUMENT_COLLECT_END
*/
#define VIPS_ARGUMENT_COLLECT_SET(PSPEC, ARG_CLASS, AP) \
if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
GValue value = G_VALUE_INIT; \
gchar *error = NULL; \
\
/* Input args are given inline, eg. ("factor", 12.0) \
* and must be collected. \
*/ \
G_VALUE_COLLECT_INIT(&value, \
G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
\
/* Don't bother with the error message. \
*/ \
if (error) { \
VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
g_free(error); \
}
#define VIPS_ARGUMENT_COLLECT_GET(PSPEC, ARG_CLASS, AP) \
g_value_unset(&value); \
} \
else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
{ \
void **arg G_GNUC_UNUSED; \
\
/* Output args are a pointer to where to send the \
* result. \
*/ \
arg = va_arg(AP, void **);
#define VIPS_ARGUMENT_COLLECT_END \
}
#define VIPS_TYPE_OBJECT (vips_object_get_type())
#define VIPS_OBJECT(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
#define VIPS_OBJECT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
#define VIPS_IS_OBJECT(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_OBJECT))
#define VIPS_IS_OBJECT_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_OBJECT))
#define VIPS_OBJECT_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
struct _VipsObject {
GObject parent_instance;
/* Set after ->build() has run successfully: construct is fully done
* and checked.
*/
gboolean constructed;
/* Set for static objects which are allocated at startup and never
* freed. These objects are omitted from leak reports.
*/
gboolean static_object;
/* Table of argument instances for this class and any derived classes.
*/
VipsArgumentTable *argument_table;
/* Class properties (see below), duplicated in the instance so we can
* get at them easily via the property system.
*/
char *nickname;
char *description;
/* The pre/post/close callbacks are all fire-once.
*/
gboolean preclose;
gboolean close;
gboolean postclose;
/* Total memory allocated relative to this object, handy for
* profiling.
*/
size_t local_memory;
};
struct _VipsObjectClass {
GObjectClass parent_class;
/* Build the object ... all argument properties have been set,
* now build the thing.
*/
int (*build)(VipsObject *object);
/* Just after build ... the object is fully ready for work.
*/
int (*postbuild)(VipsObject *object, void *data);
/* Try to print something about the class, handy for help displays.
* Keep to one line.
*/
void (*summary_class)(struct _VipsObjectClass *cls, VipsBuf *buf);
/* Try to print a one-line summary for the object, the user can see
* this output via things like "header fred.tif", --vips-cache-trace,
* etc.
*/
void (*summary)(VipsObject *object, VipsBuf *buf);
/* Try to print everything about the object, handy for debugging.
*/
void (*dump)(VipsObject *object, VipsBuf *buf);
/* Sanity-check the object. Print messages and stuff.
* Handy for debugging.
*/
void (*sanity)(VipsObject *object, VipsBuf *buf);
/* Rewind. Save and restore any stuff that needs to survive a
* dispose().
*/
void (*rewind)(VipsObject *object);
/* Just before close, everything is still alive.
*/
void (*preclose)(VipsObject *object);
/* Close, time to free stuff.
*/
void (*close)(VipsObject *object);
/* Post-close, everything is dead, except the VipsObject pointer.
* Useful for eg. deleting the file associated with a temp image.
*/
void (*postclose)(VipsObject *object);
/* The CLI interface. Implement these four to get CLI input and output
* for your object.
*/
/* Given a command-line arg (eg. a filename), make an instance of the
* object. Just do the g_object_new(), don't call _build().
*
* Don't call this directly, see vips_object_new_from_string().
*/
VipsObject *(*new_from_string)(const char *string);
/* The inverse of ^^. Given an object, output what ->new_from_string()
* would have been given to make that object.
*/
void (*to_string)(VipsObject *object, VipsBuf *buf);
/* Does this output arg need an arg from the command line? Image
* output, for example, needs a filename to write to.
*/
gboolean output_needs_arg;
/* Write the object to the string. Return 0 for success, or -1 on
* error, setting vips_error(). string is NULL if output_needs_arg()
* was FALSE.
*/
int (*output_to_arg)(VipsObject *object, const char *string);
/* Class nickname, eg. "VipsInterpolateBicubic" has "bicubic" as a
* nickname. Not internationalised.
*/
const char *nickname;
/* Class description. Used for help messages, so internationalised.
*/
const char *description;
/* Hash from pspec to VipsArgumentClass.
*
* This records the VipsArgumentClass for every pspec used in
* VipsObject and any subclass (ie. everywhere), so it's huge. Don't
* loop over this hash! Fine for lookups though.
*/
VipsArgumentTable *argument_table;
/* A sorted (by priority) list of the VipsArgumentClass for this class
* and any superclasses. This is small and specific to this class.
*
* Use the stored GType to work out when to restart the list for a
* subclass.
*/
GSList *argument_table_traverse;
GType argument_table_traverse_gtype;
/* This class is deprecated and therefore hidden from various UI bits.
*
* VipsOperation has a deprecated flag, use that in preference to this
* if you can.
*/
gboolean deprecated;
/* Reserved for future expansion.
*/
void (*_vips_reserved1)(void);
void (*_vips_reserved2)(void);
void (*_vips_reserved3)(void);
void (*_vips_reserved4)(void);
};
VIPS_API
gboolean vips_value_is_null(GParamSpec *psoec, const GValue *value);
VIPS_API
void vips_object_set_property(GObject *gobject,
guint property_id, const GValue *value, GParamSpec *pspec);
VIPS_API
void vips_object_get_property(GObject *gobject,
guint property_id, GValue *value, GParamSpec *pspec);
VIPS_API
void vips_object_preclose(VipsObject *object);
VIPS_API
int vips_object_build(VipsObject *object);
VIPS_API
void vips_object_summary_class(VipsObjectClass *klass, VipsBuf *buf);
VIPS_API
void vips_object_summary(VipsObject *object, VipsBuf *buf);
VIPS_API
void vips_object_dump(VipsObject *object, VipsBuf *buf);
VIPS_API
void vips_object_print_summary_class(VipsObjectClass *klass);
VIPS_API
void vips_object_print_summary(VipsObject *object);
VIPS_API
void vips_object_print_dump(VipsObject *object);
VIPS_API
void vips_object_print_name(VipsObject *object);
VIPS_API
gboolean vips_object_sanity(VipsObject *object);
VIPS_API
GType vips_object_get_type(void);
VIPS_API
void vips_object_class_install_argument(VipsObjectClass *cls,
GParamSpec *pspec, VipsArgumentFlags flags,
int priority, guint offset);
VIPS_API
int vips_object_set_argument_from_string(VipsObject *object,
const char *name, const char *value);
VIPS_API
gboolean vips_object_argument_needsstring(VipsObject *object,
const char *name);
VIPS_API
int vips_object_get_argument_to_string(VipsObject *object,
const char *name, const char *arg);
VIPS_API
int vips_object_set_required(VipsObject *object, const char *value);
typedef void *(*VipsObjectSetArguments)(VipsObject *object, void *a, void *b);
VIPS_API
VipsObject *vips_object_new(GType type,
VipsObjectSetArguments set, void *a, void *b);
VIPS_API
int vips_object_set_valist(VipsObject *object, va_list ap);
VIPS_API
int vips_object_set(VipsObject *object, ...)
G_GNUC_NULL_TERMINATED;
VIPS_API
int vips_object_set_from_string(VipsObject *object, const char *string);
VIPS_API
VipsObject *vips_object_new_from_string(VipsObjectClass *object_class,
const char *p);
VIPS_API
void vips_object_to_string(VipsObject *object, VipsBuf *buf);
VIPS_API
void *vips_object_map(VipsSListMap2Fn fn, void *a, void *b);
typedef void *(*VipsTypeMapFn)(GType type, void *a);
typedef void *(*VipsTypeMap2Fn)(GType type, void *a, void *b);
typedef void *(*VipsClassMapFn)(VipsObjectClass *cls, void *a);
VIPS_API
void *vips_type_map(GType base, VipsTypeMap2Fn fn, void *a, void *b);
VIPS_API
void *vips_type_map_all(GType base, VipsTypeMapFn fn, void *a);
VIPS_API
int vips_type_depth(GType type);
VIPS_API
GType vips_type_find(const char *basename, const char *nickname);
VIPS_API
const char *vips_nickname_find(GType type);
VIPS_API
void *vips_class_map_all(GType type, VipsClassMapFn fn, void *a);
VIPS_API
const VipsObjectClass *vips_class_find(const char *basename,
const char *nickname);
VIPS_API
VipsObject **vips_object_local_array(VipsObject *parent, int n);
VIPS_API
void vips_object_local_cb(VipsObject *vobject, GObject *gobject);
#define vips_object_local(V, G) \
(g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G))
VIPS_API
void vips_object_set_static(VipsObject *object, gboolean static_object);
VIPS_API
void vips_object_print_all(void);
VIPS_API
void vips_object_sanity_all(void);
VIPS_API
void vips_object_rewind(VipsObject *object);
VIPS_API
void vips_object_unref_outputs(VipsObject *object);
VIPS_API
const char *vips_object_get_description(VipsObject *object);
#ifdef __cplusplus
}
#endif /*__cplusplus*/
#endif /*VIPS_OBJECT_H*/