Blame json_object.h

Packit Service def718
/*
Packit Service def718
 * $Id: json_object.h,v 1.12 2006/01/30 23:07:57 mclark Exp $
Packit Service def718
 *
Packit Service def718
 * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
Packit Service def718
 * Michael Clark <michael@metaparadigm.com>
Packit Service def718
 * Copyright (c) 2009 Hewlett-Packard Development Company, L.P.
Packit Service def718
 *
Packit Service def718
 * This library is free software; you can redistribute it and/or modify
Packit Service def718
 * it under the terms of the MIT license. See COPYING for details.
Packit Service def718
 *
Packit Service def718
 */
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * @file
Packit Service def718
 * @brief Core json-c API.  Start here, or with json_tokener.h
Packit Service def718
 */
Packit Service def718
#ifndef _json_object_h_
Packit Service def718
#define _json_object_h_
Packit Service def718
Packit Service def718
#ifdef __GNUC__
Packit Service def718
#define THIS_FUNCTION_IS_DEPRECATED(func) func __attribute__ ((deprecated))
Packit Service def718
#elif defined(_MSC_VER)
Packit Service def718
#define THIS_FUNCTION_IS_DEPRECATED(func) __declspec(deprecated) func
Packit Service def718
#elif defined(__clang__)
Packit Service def718
#define THIS_FUNCTION_IS_DEPRECATED(func) func __deprecated
Packit Service def718
#else
Packit Service def718
#define THIS_FUNCTION_IS_DEPRECATED(func) func
Packit Service def718
#endif
Packit Service def718
Packit Service def718
#ifdef __GNUC__
Packit Service def718
#define JSON_C_CONST_FUNCTION(func) func __attribute__((const))
Packit Service def718
#else
Packit Service def718
#define JSON_C_CONST_FUNCTION(func) func
Packit Service def718
#endif
Packit Service def718
Packit Service def718
#if defined(_MSC_VER) 
Packit Service def718
#define JSON_EXPORT __declspec(dllexport)
Packit Service def718
#else
Packit Service def718
#define JSON_EXPORT extern
Packit Service def718
#endif
Packit Service def718
Packit Service def718
#include <stddef.h>
Packit Service def718
#include "json_inttypes.h"
Packit Service def718
#include "printbuf.h"
Packit Service def718
Packit Service def718
#ifdef __cplusplus
Packit Service def718
extern "C" {
Packit Service def718
#endif
Packit Service def718
Packit Service def718
#define JSON_OBJECT_DEF_HASH_ENTRIES 16
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * A flag for the json_object_to_json_string_ext() and
Packit Service def718
 * json_object_to_file_ext() functions which causes the output
Packit Service def718
 * to have no extra whitespace or formatting applied.
Packit Service def718
 */
Packit Service def718
#define JSON_C_TO_STRING_PLAIN      0
Packit Service def718
/**
Packit Service def718
 * A flag for the json_object_to_json_string_ext() and
Packit Service def718
 * json_object_to_file_ext() functions which causes the output to have
Packit Service def718
 * minimal whitespace inserted to make things slightly more readable.
Packit Service def718
 */
Packit Service def718
#define JSON_C_TO_STRING_SPACED     (1<<0)
Packit Service def718
/**
Packit Service def718
 * A flag for the json_object_to_json_string_ext() and
Packit Service def718
 * json_object_to_file_ext() functions which causes
Packit Service def718
 * the output to be formatted.
Packit Service def718
 *
Packit Service def718
 * See the "Two Space Tab" option at http://jsonformatter.curiousconcept.com/
Packit Service def718
 * for an example of the format.
Packit Service def718
 */
Packit Service def718
#define JSON_C_TO_STRING_PRETTY     (1<<1)
Packit Service def718
/**
Packit Service def718
 * A flag for the json_object_to_json_string_ext() and
Packit Service def718
 * json_object_to_file_ext() functions which causes
Packit Service def718
 * the output to be formatted.
Packit Service def718
 *
Packit Service def718
 * Instead of a "Two Space Tab" this gives a single tab character.
Packit Service def718
 */
Packit Service def718
#define JSON_C_TO_STRING_PRETTY_TAB (1<<3)
Packit Service def718
/**
Packit Service def718
 * A flag to drop trailing zero for float values
Packit Service def718
 */
Packit Service def718
#define JSON_C_TO_STRING_NOZERO     (1<<2)
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Don't escape forward slashes.
Packit Service def718
 */
Packit Service def718
#define JSON_C_TO_STRING_NOSLASHESCAPE (1<<4)
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * A flag for the json_object_object_add_ex function which
Packit Service def718
 * causes the value to be added without a check if it already exists.
Packit Service def718
 * Note: it is the responsibilty of the caller to ensure that no
Packit Service def718
 * key is added multiple times. If this is done, results are
Packit Service def718
 * unpredictable. While this option is somewhat dangerous, it
Packit Service def718
 * permits potentially large performance savings in code that
Packit Service def718
 * knows for sure the key values are unique (e.g. because the
Packit Service def718
 * code adds a well-known set of constant key values).
Packit Service def718
 */
Packit Service def718
#define JSON_C_OBJECT_ADD_KEY_IS_NEW (1<<1)
Packit Service def718
/**
Packit Service def718
 * A flag for the json_object_object_add_ex function which
Packit Service def718
 * flags the key as being constant memory. This means that
Packit Service def718
 * the key will NOT be copied via strdup(), resulting in a
Packit Service def718
 * potentially huge performance win (malloc, strdup and
Packit Service def718
 * free are usually performance hogs). It is acceptable to
Packit Service def718
 * use this flag for keys in non-constant memory blocks if
Packit Service def718
 * the caller ensure that the memory holding the key lives
Packit Service def718
 * longer than the corresponding json object. However, this
Packit Service def718
 * is somewhat dangerous and should only be done if really
Packit Service def718
 * justified.
Packit Service def718
 * The general use-case for this flag is cases where the
Packit Service def718
 * key is given as a real constant value in the function
Packit Service def718
 * call, e.g. as in
Packit Service def718
 *   json_object_object_add_ex(obj, "ip", json,
Packit Service def718
 *       JSON_C_OBJECT_KEY_IS_CONSTANT);
Packit Service def718
 */
Packit Service def718
#define JSON_C_OBJECT_KEY_IS_CONSTANT (1<<2)
Packit Service def718
Packit Service def718
#undef FALSE
Packit Service def718
#define FALSE ((json_bool)0)
Packit Service def718
Packit Service def718
#undef TRUE
Packit Service def718
#define TRUE ((json_bool)1)
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Set the global value of an option, which will apply to all
Packit Service def718
 * current and future threads that have not set a thread-local value.
Packit Service def718
 *
Packit Service def718
 * @see json_c_set_serialization_double_format
Packit Service def718
 */
Packit Service def718
#define JSON_C_OPTION_GLOBAL (0)
Packit Service def718
/**
Packit Service def718
 * Set a thread-local value of an option, overriding the global value.
Packit Service def718
 * This will fail if json-c is not compiled with threading enabled, and
Packit Service def718
 * with the __thread specifier (or equivalent) available.
Packit Service def718
 *
Packit Service def718
 * @see json_c_set_serialization_double_format
Packit Service def718
 */
Packit Service def718
#define JSON_C_OPTION_THREAD (1)
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * A structure to use with json_object_object_foreachC() loops.
Packit Service def718
 * Contains key, val and entry members.
Packit Service def718
 */
Packit Service def718
struct json_object_iter
Packit Service def718
{
Packit Service def718
	char *key;
Packit Service def718
	struct json_object *val;
Packit Service def718
	struct lh_entry *entry;
Packit Service def718
};
Packit Service def718
typedef struct json_object_iter json_object_iter;
Packit Service def718
Packit Service def718
typedef int json_bool;
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * @brief The core type for all type of JSON objects handled by json-c
Packit Service def718
 */
Packit Service def718
typedef struct json_object json_object;
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Type of custom user delete functions.  See json_object_set_serializer.
Packit Service def718
 */
Packit Service def718
typedef void (json_object_delete_fn)(struct json_object *jso, void *userdata);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Type of a custom serialization function.  See json_object_set_serializer.
Packit Service def718
 */
Packit Service def718
typedef int (json_object_to_json_string_fn)(struct json_object *jso,
Packit Service def718
						struct printbuf *pb,
Packit Service def718
						int level,
Packit Service def718
						int flags);
Packit Service def718
Packit Service def718
/* supported object types */
Packit Service def718
Packit Service def718
typedef enum json_type {
Packit Service def718
  /* If you change this, be sure to update json_type_to_name() too */
Packit Service def718
  json_type_null,
Packit Service def718
  json_type_boolean,
Packit Service def718
  json_type_double,
Packit Service def718
  json_type_int,
Packit Service def718
  json_type_object,
Packit Service def718
  json_type_array,
Packit Service def718
  json_type_string
Packit Service def718
} json_type;
Packit Service def718
Packit Service def718
/* reference counting functions */
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Increment the reference count of json_object, thereby grabbing shared
Packit Service def718
 * ownership of obj.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_get(struct json_object *obj);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Decrement the reference count of json_object and free if it reaches zero.
Packit Service def718
 * You must have ownership of obj prior to doing this or you will cause an
Packit Service def718
 * imbalance in the reference count.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns 1 if the object was freed.
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_put(struct json_object *obj);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Check if the json_object is of a given type
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param type one of:
Packit Service def718
     json_type_null (i.e. obj == NULL),
Packit Service def718
     json_type_boolean,
Packit Service def718
     json_type_double,
Packit Service def718
     json_type_int,
Packit Service def718
     json_type_object,
Packit Service def718
     json_type_array,
Packit Service def718
     json_type_string
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_is_type(const struct json_object *obj, enum json_type type);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Get the type of the json_object.  See also json_type_to_name() to turn this
Packit Service def718
 * into a string suitable, for instance, for logging.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns type being one of:
Packit Service def718
     json_type_null (i.e. obj == NULL),
Packit Service def718
     json_type_boolean,
Packit Service def718
     json_type_double,
Packit Service def718
     json_type_int,
Packit Service def718
     json_type_object,
Packit Service def718
     json_type_array,
Packit Service def718
     json_type_string
Packit Service def718
 */
Packit Service def718
JSON_EXPORT enum json_type json_object_get_type(const struct json_object *obj);
Packit Service def718
Packit Service def718
Packit Service def718
/** Stringify object to json format.
Packit Service def718
 * Equivalent to json_object_to_json_string_ext(obj, JSON_C_TO_STRING_SPACED)
Packit Service def718
 * The pointer you get is an internal of your json object. You don't
Packit Service def718
 * have to free it, later use of json_object_put() should be sufficient.
Packit Service def718
 * If you can not ensure there's no concurrent access to *obj use
Packit Service def718
 * strdup().
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns a string in JSON format
Packit Service def718
 */
Packit Service def718
JSON_EXPORT const char* json_object_to_json_string(struct json_object *obj);
Packit Service def718
Packit Service def718
/** Stringify object to json format
Packit Service def718
 * @see json_object_to_json_string() for details on how to free string.
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param flags formatting options, see JSON_C_TO_STRING_PRETTY and other constants
Packit Service def718
 * @returns a string in JSON format
Packit Service def718
 */
Packit Service def718
JSON_EXPORT const char* json_object_to_json_string_ext(struct json_object *obj, int
Packit Service def718
flags);
Packit Service def718
Packit Service def718
/** Stringify object to json format
Packit Service def718
 * @see json_object_to_json_string() for details on how to free string.
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param flags formatting options, see JSON_C_TO_STRING_PRETTY and other constants
Packit Service def718
 * @param length a pointer where, if not NULL, the length (without null) is stored
Packit Service def718
 * @returns a string in JSON format and the length if not NULL
Packit Service def718
 */
Packit Service def718
JSON_EXPORT const char* json_object_to_json_string_length(struct json_object *obj, int
Packit Service def718
flags, size_t *length);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Returns the userdata set by json_object_set_userdata() or
Packit Service def718
 * json_object_set_serializer()
Packit Service def718
 *
Packit Service def718
 * @param jso the object to return the userdata for
Packit Service def718
 */
Packit Service def718
JSON_EXPORT void* json_object_get_userdata(json_object *jso);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Set an opaque userdata value for an object
Packit Service def718
 *
Packit Service def718
 * The userdata can be retrieved using json_object_get_userdata().
Packit Service def718
 *
Packit Service def718
 * If custom userdata is already set on this object, any existing user_delete
Packit Service def718
 * function is called before the new one is set.
Packit Service def718
 *
Packit Service def718
 * The user_delete parameter is optional and may be passed as NULL, even if
Packit Service def718
 * the userdata parameter is non-NULL.  It will be called just before the
Packit Service def718
 * json_object is deleted, after it's reference count goes to zero
Packit Service def718
 * (see json_object_put()).
Packit Service def718
 * If this is not provided, it is up to the caller to free the userdata at
Packit Service def718
 * an appropriate time. (i.e. after the json_object is deleted)
Packit Service def718
 *
Packit Service def718
 * Note: Objects created by parsing strings may have custom serializers set
Packit Service def718
 * which expect the userdata to contain specific data (due to use of
Packit Service def718
 * json_object_new_double_s()). In this case, json_object_set_serialiser() with
Packit Service def718
 * NULL as to_string_func should be used instead to set the userdata and reset
Packit Service def718
 * the serializer to its default value.
Packit Service def718
 *
Packit Service def718
 * @param jso the object to set the userdata for
Packit Service def718
 * @param userdata an optional opaque cookie
Packit Service def718
 * @param user_delete an optional function from freeing userdata
Packit Service def718
 */
Packit Service def718
JSON_EXPORT void json_object_set_userdata(json_object *jso, void *userdata,
Packit Service def718
				     json_object_delete_fn *user_delete);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Set a custom serialization function to be used when this particular object
Packit Service def718
 * is converted to a string by json_object_to_json_string.
Packit Service def718
 *
Packit Service def718
 * If custom userdata is already set on this object, any existing user_delete
Packit Service def718
 * function is called before the new one is set.
Packit Service def718
 *
Packit Service def718
 * If to_string_func is NULL the default behaviour is reset (but the userdata
Packit Service def718
 * and user_delete fields are still set).
Packit Service def718
 *
Packit Service def718
 * The userdata parameter is optional and may be passed as NULL. It can be used
Packit Service def718
 * to provide additional data for to_string_func to use. This parameter may
Packit Service def718
 * be NULL even if user_delete is non-NULL.
Packit Service def718
 *
Packit Service def718
 * The user_delete parameter is optional and may be passed as NULL, even if
Packit Service def718
 * the userdata parameter is non-NULL.  It will be called just before the
Packit Service def718
 * json_object is deleted, after it's reference count goes to zero
Packit Service def718
 * (see json_object_put()).
Packit Service def718
 * If this is not provided, it is up to the caller to free the userdata at
Packit Service def718
 * an appropriate time. (i.e. after the json_object is deleted)
Packit Service def718
 *
Packit Service def718
 * Note that the userdata is the same as set by json_object_set_userdata(), so
Packit Service def718
 * care must be taken not to overwrite the value when both a custom serializer
Packit Service def718
 * and json_object_set_userdata() are used.
Packit Service def718
 *
Packit Service def718
 * @param jso the object to customize
Packit Service def718
 * @param to_string_func the custom serialization function
Packit Service def718
 * @param userdata an optional opaque cookie
Packit Service def718
 * @param user_delete an optional function from freeing userdata
Packit Service def718
 */
Packit Service def718
JSON_EXPORT void json_object_set_serializer(json_object *jso,
Packit Service def718
	json_object_to_json_string_fn *to_string_func,
Packit Service def718
	void *userdata,
Packit Service def718
	json_object_delete_fn *user_delete);
Packit Service def718
Packit Service def718
#ifdef __clang__
Packit Service def718
/*
Packit Service def718
 * Clang doesn't pay attention to the parameters defined in the
Packit Service def718
 * function typedefs used here, so turn off spurious doc warnings.
Packit Service def718
 * {
Packit Service def718
 */
Packit Service def718
#pragma clang diagnostic push
Packit Service def718
#pragma clang diagnostic ignored "-Wdocumentation"
Packit Service def718
#endif
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Simply call free on the userdata pointer.
Packit Service def718
 * Can be used with json_object_set_serializer().
Packit Service def718
 *
Packit Service def718
 * @param jso unused
Packit Service def718
 * @param userdata the pointer that is passed to free().
Packit Service def718
 */
Packit Service def718
json_object_delete_fn json_object_free_userdata;
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Copy the jso->_userdata string over to pb as-is.
Packit Service def718
 * Can be used with json_object_set_serializer().
Packit Service def718
 *
Packit Service def718
 * @param jso The object whose _userdata is used.
Packit Service def718
 * @param pb The destination buffer.
Packit Service def718
 * @param level Ignored.
Packit Service def718
 * @param flags Ignored.
Packit Service def718
 */
Packit Service def718
json_object_to_json_string_fn json_object_userdata_to_json_string;
Packit Service def718
Packit Service def718
#ifdef __clang__
Packit Service def718
/* } */
Packit Service def718
#pragma clang diagnostic pop
Packit Service def718
#endif
Packit Service def718
Packit Service def718
Packit Service def718
/* object type methods */
Packit Service def718
Packit Service def718
/** Create a new empty object with a reference count of 1.  The caller of
Packit Service def718
 * this object initially has sole ownership.  Remember, when using
Packit Service def718
 * json_object_object_add or json_object_array_put_idx, ownership will
Packit Service def718
 * transfer to the object/array.  Call json_object_get if you want to maintain
Packit Service def718
 * shared ownership or also add this object as a child of multiple objects or
Packit Service def718
 * arrays.  Any ownerships you acquired but did not transfer must be released
Packit Service def718
 * through json_object_put.
Packit Service def718
 *
Packit Service def718
 * @returns a json_object of type json_type_object
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_object(void);
Packit Service def718
Packit Service def718
/** Get the hashtable of a json_object of type json_type_object
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns a linkhash
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct lh_table* json_object_get_object(const struct json_object *obj);
Packit Service def718
Packit Service def718
/** Get the size of an object in terms of the number of fields it has.
Packit Service def718
 * @param obj the json_object whose length to return
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_object_length(const struct json_object* obj);
Packit Service def718
Packit Service def718
/** Get the sizeof (struct json_object).
Packit Service def718
 * @returns a size_t with the sizeof (struct json_object)
Packit Service def718
 */
Packit Service def718
JSON_C_CONST_FUNCTION(JSON_EXPORT size_t json_c_object_sizeof(void));
Packit Service def718
Packit Service def718
/** Add an object field to a json_object of type json_type_object
Packit Service def718
 *
Packit Service def718
 * The reference count will *not* be incremented. This is to make adding
Packit Service def718
 * fields to objects in code more compact. If you want to retain a reference
Packit Service def718
 * to an added object, independent of the lifetime of obj, you must wrap the
Packit Service def718
 * passed object with json_object_get.
Packit Service def718
 *
Packit Service def718
 * Upon calling this, the ownership of val transfers to obj.  Thus you must
Packit Service def718
 * make sure that you do in fact have ownership over this object.  For instance,
Packit Service def718
 * json_object_new_object will give you ownership until you transfer it,
Packit Service def718
 * whereas json_object_object_get does not.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param key the object field name (a private copy will be duplicated)
Packit Service def718
 * @param val a json_object or NULL member to associate with the given field
Packit Service def718
 *
Packit Service def718
 * @return On success, 0 is returned.
Packit Service def718
 * 	On error, a negative value is returned.
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_object_add(struct json_object* obj, const char *key,
Packit Service def718
				   struct json_object *val);
Packit Service def718
Packit Service def718
/** Add an object field to a json_object of type json_type_object
Packit Service def718
 *
Packit Service def718
 * The semantics are identical to json_object_object_add, except that an
Packit Service def718
 * additional flag fields gives you more control over some detail aspects
Packit Service def718
 * of processing. See the description of JSON_C_OBJECT_ADD_* flags for more
Packit Service def718
 * details.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param key the object field name (a private copy will be duplicated)
Packit Service def718
 * @param val a json_object or NULL member to associate with the given field
Packit Service def718
 * @param opts process-modifying options. To specify multiple options, use 
Packit Service def718
 *             arithmetic or (OPT1|OPT2)
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_object_add_ex(struct json_object* obj,
Packit Service def718
				const char *const key,
Packit Service def718
				struct json_object *const val,
Packit Service def718
				const unsigned opts);
Packit Service def718
Packit Service def718
/** Get the json_object associate with a given object field.
Packit Service def718
 * Deprecated/discouraged: used json_object_object_get_ex instead.
Packit Service def718
 *
Packit Service def718
 * This returns NULL if the field is found but its value is null, or if
Packit Service def718
 *  the field is not found, or if obj is not a json_type_object.  If you
Packit Service def718
 *  need to distinguis between these cases, use json_object_object_get_ex().
Packit Service def718
 *
Packit Service def718
 * *No* reference counts will be changed.  There is no need to manually adjust
Packit Service def718
 * reference counts through the json_object_put/json_object_get methods unless
Packit Service def718
 * you need to have the child (value) reference maintain a different lifetime
Packit Service def718
 * than the owning parent (obj). Ownership of the returned value is retained
Packit Service def718
 * by obj (do not do json_object_put unless you have done a json_object_get).
Packit Service def718
 * If you delete the value from obj (json_object_object_del) and wish to access
Packit Service def718
 * the returned reference afterwards, make sure you have first gotten shared
Packit Service def718
 * ownership through json_object_get (& don't forget to do a json_object_put
Packit Service def718
 * or transfer ownership to prevent a memory leak).
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param key the object field name
Packit Service def718
 * @returns the json_object associated with the given field name
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_object_get(const struct json_object* obj,
Packit Service def718
						  const char *key);
Packit Service def718
Packit Service def718
/** Get the json_object associated with a given object field.
Packit Service def718
 *
Packit Service def718
 * This returns true if the key is found, false in all other cases (including
Packit Service def718
 * if obj isn't a json_type_object).
Packit Service def718
 *
Packit Service def718
 * *No* reference counts will be changed.  There is no need to manually adjust
Packit Service def718
 * reference counts through the json_object_put/json_object_get methods unless
Packit Service def718
 * you need to have the child (value) reference maintain a different lifetime
Packit Service def718
 * than the owning parent (obj).  Ownership of value is retained by obj.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param key the object field name
Packit Service def718
 * @param value a pointer where to store a reference to the json_object
Packit Service def718
 *              associated with the given field name.
Packit Service def718
 *
Packit Service def718
 *              It is safe to pass a NULL value.
Packit Service def718
 * @returns whether or not the key exists
Packit Service def718
 */
Packit Service def718
JSON_EXPORT json_bool json_object_object_get_ex(const struct json_object* obj,
Packit Service def718
                                           const char *key,
Packit Service def718
                                           struct json_object **value);
Packit Service def718
Packit Service def718
/** Delete the given json_object field
Packit Service def718
 *
Packit Service def718
 * The reference count will be decremented for the deleted object.  If there
Packit Service def718
 * are no more owners of the value represented by this key, then the value is
Packit Service def718
 * freed.  Otherwise, the reference to the value will remain in memory.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param key the object field name
Packit Service def718
 */
Packit Service def718
JSON_EXPORT void json_object_object_del(struct json_object* obj, const char *key);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Iterate through all keys and values of an object.
Packit Service def718
 *
Packit Service def718
 * Adding keys to the object while iterating is NOT allowed.
Packit Service def718
 *
Packit Service def718
 * Deleting an existing key, or replacing an existing key with a
Packit Service def718
 * new value IS allowed.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param key the local name for the char* key variable defined in the body
Packit Service def718
 * @param val the local name for the json_object* object variable defined in
Packit Service def718
 *            the body
Packit Service def718
 */
Packit Service def718
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && __STDC_VERSION__ >= 199901L
Packit Service def718
Packit Service def718
# define json_object_object_foreach(obj,key,val) \
Packit Service def718
	char *key = NULL; \
Packit Service def718
	struct json_object *val __attribute__((__unused__)) = NULL; \
Packit Service def718
	for(struct lh_entry *entry ## key = json_object_get_object(obj)->head, *entry_next ## key = NULL; \
Packit Service def718
		({ if(entry ## key) { \
Packit Service def718
			key = (char*)lh_entry_k(entry ## key); \
Packit Service def718
			val = (struct json_object*)lh_entry_v(entry ## key); \
Packit Service def718
			entry_next ## key = entry ## key->next; \
Packit Service def718
		} ; entry ## key; }); \
Packit Service def718
		entry ## key = entry_next ## key )
Packit Service def718
Packit Service def718
#else /* ANSI C or MSC */
Packit Service def718
Packit Service def718
# define json_object_object_foreach(obj,key,val) \
Packit Service def718
	char *key = NULL;\
Packit Service def718
	struct json_object *val = NULL; \
Packit Service def718
	struct lh_entry *entry ## key; \
Packit Service def718
	struct lh_entry *entry_next ## key = NULL; \
Packit Service def718
	for(entry ## key = json_object_get_object(obj)->head; \
Packit Service def718
		(entry ## key ? ( \
Packit Service def718
			key = (char*)lh_entry_k(entry ## key), \
Packit Service def718
			val = (struct json_object*)lh_entry_v(entry ## key), \
Packit Service def718
			entry_next ## key = entry ## key->next, \
Packit Service def718
			entry ## key) : 0); \
Packit Service def718
		entry ## key = entry_next ## key)
Packit Service def718
Packit Service def718
#endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) && __STDC_VERSION__ >= 199901L */
Packit Service def718
Packit Service def718
/** Iterate through all keys and values of an object (ANSI C Safe)
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param iter the object iterator, use type json_object_iter
Packit Service def718
 */
Packit Service def718
#define json_object_object_foreachC(obj,iter) \
Packit Service def718
 for(iter.entry = json_object_get_object(obj)->head; \
Packit Service def718
     (iter.entry ? (iter.key = (char*)lh_entry_k(iter.entry), iter.val = (struct json_object*)lh_entry_v(iter.entry), iter.entry) : 0); \
Packit Service def718
     iter.entry = iter.entry->next)
Packit Service def718
Packit Service def718
/* Array type methods */
Packit Service def718
Packit Service def718
/** Create a new empty json_object of type json_type_array
Packit Service def718
 * @returns a json_object of type json_type_array
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_array(void);
Packit Service def718
Packit Service def718
/** Get the arraylist of a json_object of type json_type_array
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns an arraylist
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct array_list* json_object_get_array(const struct json_object *obj);
Packit Service def718
Packit Service def718
/** Get the length of a json_object of type json_type_array
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns an int
Packit Service def718
 */
Packit Service def718
JSON_EXPORT size_t json_object_array_length(const struct json_object *obj);
Packit Service def718
Packit Service def718
/** Sorts the elements of jso of type json_type_array
Packit Service def718
*
Packit Service def718
* Pointers to the json_object pointers will be passed as the two arguments
Packit Service def718
* to sort_fn
Packit Service def718
*
Packit Service def718
* @param jso the json_object instance
Packit Service def718
* @param sort_fn a sorting function
Packit Service def718
*/
Packit Service def718
JSON_EXPORT void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *));
Packit Service def718
Packit Service def718
/** Binary search a sorted array for a specified key object.
Packit Service def718
 *
Packit Service def718
 * It depends on your compare function what's sufficient as a key.
Packit Service def718
 * Usually you create some dummy object with the parameter compared in
Packit Service def718
 * it, to identify the right item you're actually looking for.
Packit Service def718
 *
Packit Service def718
 * @see json_object_array_sort() for hints on the compare function.
Packit Service def718
 *
Packit Service def718
 * @param key a dummy json_object with the right key
Packit Service def718
 * @param jso the array object we're searching
Packit Service def718
 * @param sort_fn the sort/compare function
Packit Service def718
 *
Packit Service def718
 * @return the wanted json_object instance
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_array_bsearch(
Packit Service def718
		const struct json_object *key,
Packit Service def718
		const struct json_object *jso,
Packit Service def718
		int (*sort_fn)(const void *, const void *));
Packit Service def718
Packit Service def718
/** Add an element to the end of a json_object of type json_type_array
Packit Service def718
 *
Packit Service def718
 * The reference count will *not* be incremented. This is to make adding
Packit Service def718
 * fields to objects in code more compact. If you want to retain a reference
Packit Service def718
 * to an added object you must wrap the passed object with json_object_get
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param val the json_object to be added
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_array_add(struct json_object *obj,
Packit Service def718
				 struct json_object *val);
Packit Service def718
Packit Service def718
/** Insert or replace an element at a specified index in an array (a json_object of type json_type_array)
Packit Service def718
 *
Packit Service def718
 * The reference count will *not* be incremented. This is to make adding
Packit Service def718
 * fields to objects in code more compact. If you want to retain a reference
Packit Service def718
 * to an added object you must wrap the passed object with json_object_get
Packit Service def718
 *
Packit Service def718
 * The reference count of a replaced object will be decremented.
Packit Service def718
 *
Packit Service def718
 * The array size will be automatically be expanded to the size of the
Packit Service def718
 * index if the index is larger than the current size.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param idx the index to insert the element at
Packit Service def718
 * @param val the json_object to be added
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_array_put_idx(struct json_object *obj, size_t idx,
Packit Service def718
				     struct json_object *val);
Packit Service def718
Packit Service def718
/** Get the element at specificed index of the array (a json_object of type json_type_array)
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param idx the index to get the element at
Packit Service def718
 * @returns the json_object at the specified index (or NULL)
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_array_get_idx(const struct json_object *obj,
Packit Service def718
						     size_t idx);
Packit Service def718
Packit Service def718
/** Delete an elements from a specified index in an array (a json_object of type json_type_array)
Packit Service def718
 *
Packit Service def718
 * The reference count will be decremented for each of the deleted objects.  If there
Packit Service def718
 * are no more owners of an element that is being deleted, then the value is 
Packit Service def718
 * freed.  Otherwise, the reference to the value will remain in memory.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param idx the index to start deleting elements at
Packit Service def718
 * @param count the number of elements to delete
Packit Service def718
 * @returns 0 if the elements were successfully deleted
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_array_del_idx(struct json_object *obj, size_t idx, size_t count);
Packit Service def718
Packit Service def718
/* json_bool type methods */
Packit Service def718
Packit Service def718
/** Create a new empty json_object of type json_type_boolean
Packit Service def718
 * @param b a json_bool TRUE or FALSE (1 or 0)
Packit Service def718
 * @returns a json_object of type json_type_boolean
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_boolean(json_bool b);
Packit Service def718
Packit Service def718
/** Get the json_bool value of a json_object
Packit Service def718
 *
Packit Service def718
 * The type is coerced to a json_bool if the passed object is not a json_bool.
Packit Service def718
 * integer and double objects will return FALSE if there value is zero
Packit Service def718
 * or TRUE otherwise. If the passed object is a string it will return
Packit Service def718
 * TRUE if it has a non zero length. If any other object type is passed
Packit Service def718
 * TRUE will be returned if the object is not NULL.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns a json_bool
Packit Service def718
 */
Packit Service def718
JSON_EXPORT json_bool json_object_get_boolean(const struct json_object *obj);
Packit Service def718
Packit Service def718
Packit Service def718
/** Set the json_bool value of a json_object
Packit Service def718
 * 
Packit Service def718
 * The type of obj is checked to be a json_type_boolean and 0 is returned 
Packit Service def718
 * if it is not without any further actions. If type of obj is json_type_boolean
Packit Service def718
 * the obect value is chaned to new_value
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param new_value the value to be set
Packit Service def718
 * @returns 1 if value is set correctly, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_set_boolean(struct json_object *obj,json_bool new_value);
Packit Service def718
Packit Service def718
Packit Service def718
/* int type methods */
Packit Service def718
Packit Service def718
/** Create a new empty json_object of type json_type_int
Packit Service def718
 * Note that values are stored as 64-bit values internally.
Packit Service def718
 * To ensure the full range is maintained, use json_object_new_int64 instead.
Packit Service def718
 * @param i the integer
Packit Service def718
 * @returns a json_object of type json_type_int
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_int(int32_t i);
Packit Service def718
Packit Service def718
Packit Service def718
/** Create a new empty json_object of type json_type_int
Packit Service def718
 * @param i the integer
Packit Service def718
 * @returns a json_object of type json_type_int
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_int64(int64_t i);
Packit Service def718
Packit Service def718
Packit Service def718
/** Get the int value of a json_object
Packit Service def718
 *
Packit Service def718
 * The type is coerced to a int if the passed object is not a int.
Packit Service def718
 * double objects will return their integer conversion. Strings will be
Packit Service def718
 * parsed as an integer. If no conversion exists then 0 is returned
Packit Service def718
 * and errno is set to EINVAL. null is equivalent to 0 (no error values set)
Packit Service def718
 *
Packit Service def718
 * Note that integers are stored internally as 64-bit values.
Packit Service def718
 * If the value of too big or too small to fit into 32-bit, INT32_MAX or
Packit Service def718
 * INT32_MIN are returned, respectively.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns an int
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int32_t json_object_get_int(const struct json_object *obj);
Packit Service def718
Packit Service def718
/** Set the int value of a json_object
Packit Service def718
 * 
Packit Service def718
 * The type of obj is checked to be a json_type_int and 0 is returned 
Packit Service def718
 * if it is not without any further actions. If type of obj is json_type_int
Packit Service def718
 * the obect value is changed to new_value
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param new_value the value to be set
Packit Service def718
 * @returns 1 if value is set correctly, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_set_int(struct json_object *obj,int new_value);
Packit Service def718
Packit Service def718
/** Increment a json_type_int object by the given amount, which may be negative.
Packit Service def718
 *
Packit Service def718
 * If the type of obj is not json_type_int then 0 is returned with no further
Packit Service def718
 * action taken.
Packit Service def718
 * If the addition would result in a overflow, the object value
Packit Service def718
 * is set to INT64_MAX.
Packit Service def718
 * If the addition would result in a underflow, the object value
Packit Service def718
 * is set to INT64_MIN.
Packit Service def718
 * Neither overflow nor underflow affect the return value.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param val the value to add
Packit Service def718
 * @returns 1 if the increment succeded, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_int_inc(struct json_object *obj, int64_t val);
Packit Service def718
Packit Service def718
Packit Service def718
/** Get the int value of a json_object
Packit Service def718
 *
Packit Service def718
 * The type is coerced to a int64 if the passed object is not a int64.
Packit Service def718
 * double objects will return their int64 conversion. Strings will be
Packit Service def718
 * parsed as an int64. If no conversion exists then 0 is returned.
Packit Service def718
 *
Packit Service def718
 * NOTE: Set errno to 0 directly before a call to this function to determine
Packit Service def718
 * whether or not conversion was successful (it does not clear the value for
Packit Service def718
 * you).
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns an int64
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int64_t json_object_get_int64(const struct json_object *obj);
Packit Service def718
Packit Service def718
Packit Service def718
/** Set the int64_t value of a json_object
Packit Service def718
 * 
Packit Service def718
 * The type of obj is checked to be a json_type_int and 0 is returned 
Packit Service def718
 * if it is not without any further actions. If type of obj is json_type_int
Packit Service def718
 * the obect value is chaned to new_value
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param new_value the value to be set
Packit Service def718
 * @returns 1 if value is set correctly, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_set_int64(struct json_object *obj,int64_t new_value);
Packit Service def718
Packit Service def718
/* double type methods */
Packit Service def718
Packit Service def718
/** Create a new empty json_object of type json_type_double
Packit Service def718
 *
Packit Service def718
 * @see json_object_double_to_json_string() for how to set a custom format string.
Packit Service def718
 *
Packit Service def718
 * @param d the double
Packit Service def718
 * @returns a json_object of type json_type_double
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_double(double d);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Create a new json_object of type json_type_double, using
Packit Service def718
 * the exact serialized representation of the value.
Packit Service def718
 *
Packit Service def718
 * This allows for numbers that would otherwise get displayed
Packit Service def718
 * inefficiently (e.g. 12.3 => "12.300000000000001") to be
Packit Service def718
 * serialized with the more convenient form.
Packit Service def718
 *
Packit Service def718
 * Notes:
Packit Service def718
 *
Packit Service def718
 * This is used by json_tokener_parse_ex() to allow for
Packit Service def718
 * an exact re-serialization of a parsed object.
Packit Service def718
 *
Packit Service def718
 * The userdata field is used to store the string representation, so it
Packit Service def718
 * can't be used for other data if this function is used.
Packit Service def718
 *
Packit Service def718
 * An equivalent sequence of calls is:
Packit Service def718
 * @code
Packit Service def718
 *   jso = json_object_new_double(d);
Packit Service def718
 *   json_object_set_serializer(jso, json_object_userdata_to_json_string,
Packit Service def718
 *       strdup(ds), json_object_free_userdata);
Packit Service def718
 * @endcode
Packit Service def718
 *
Packit Service def718
 * @param d the numeric value of the double.
Packit Service def718
 * @param ds the string representation of the double.  This will be copied.
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_double_s(double d, const char *ds);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Set a global or thread-local json-c option, depending on whether
Packit Service def718
 *  JSON_C_OPTION_GLOBAL or JSON_C_OPTION_THREAD is passed.
Packit Service def718
 * Thread-local options default to undefined, and inherit from the global
Packit Service def718
 *  value, even if the global value is changed after the thread is created.
Packit Service def718
 * Attempting to set thread-local options when threading is not compiled in
Packit Service def718
 *  will result in an error.  Be sure to check the return value.
Packit Service def718
 *
Packit Service def718
 * double_format is a "%g" printf format, such as "%.20g"
Packit Service def718
 *
Packit Service def718
 * @return -1 on errors, 0 on success.
Packit Service def718
 */
Packit Service def718
int json_c_set_serialization_double_format(const char *double_format, int global_or_thread);
Packit Service def718
Packit Service def718
Packit Service def718
Packit Service def718
/** Serialize a json_object of type json_type_double to a string.
Packit Service def718
 *
Packit Service def718
 * This function isn't meant to be called directly. Instead, you can set a
Packit Service def718
 * custom format string for the serialization of this double using the
Packit Service def718
 * following call (where "%.17g" actually is the default):
Packit Service def718
 *
Packit Service def718
 * @code
Packit Service def718
 *   jso = json_object_new_double(d);
Packit Service def718
 *   json_object_set_serializer(jso, json_object_double_to_json_string,
Packit Service def718
 *       "%.17g", NULL);
Packit Service def718
 * @endcode
Packit Service def718
 *
Packit Service def718
 * @see printf(3) man page for format strings
Packit Service def718
 *
Packit Service def718
 * @param jso The json_type_double object that is serialized.
Packit Service def718
 * @param pb The destination buffer.
Packit Service def718
 * @param level Ignored.
Packit Service def718
 * @param flags Ignored.
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_double_to_json_string(struct json_object* jso,
Packit Service def718
					     struct printbuf *pb,
Packit Service def718
					     int level,
Packit Service def718
					     int flags);
Packit Service def718
Packit Service def718
/** Get the double floating point value of a json_object
Packit Service def718
 *
Packit Service def718
 * The type is coerced to a double if the passed object is not a double.
Packit Service def718
 * integer objects will return their double conversion. Strings will be
Packit Service def718
 * parsed as a double. If no conversion exists then 0.0 is returned and
Packit Service def718
 * errno is set to EINVAL. null is equivalent to 0 (no error values set)
Packit Service def718
 *
Packit Service def718
 * If the value is too big to fit in a double, then the value is set to
Packit Service def718
 * the closest infinity with errno set to ERANGE. If strings cannot be
Packit Service def718
 * converted to their double value, then EINVAL is set & NaN is returned.
Packit Service def718
 *
Packit Service def718
 * Arrays of length 0 are interpreted as 0 (with no error flags set).
Packit Service def718
 * Arrays of length 1 are effectively cast to the equivalent object and
Packit Service def718
 * converted using the above rules.  All other arrays set the error to
Packit Service def718
 * EINVAL & return NaN.
Packit Service def718
 *
Packit Service def718
 * NOTE: Set errno to 0 directly before a call to this function to
Packit Service def718
 * determine whether or not conversion was successful (it does not clear
Packit Service def718
 * the value for you).
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns a double floating point number
Packit Service def718
 */
Packit Service def718
JSON_EXPORT double json_object_get_double(const struct json_object *obj);
Packit Service def718
Packit Service def718
Packit Service def718
/** Set the double value of a json_object
Packit Service def718
 * 
Packit Service def718
 * The type of obj is checked to be a json_type_double and 0 is returned 
Packit Service def718
 * if it is not without any further actions. If type of obj is json_type_double
Packit Service def718
 * the obect value is chaned to new_value
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param new_value the value to be set
Packit Service def718
 * @returns 1 if value is set correctly, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_set_double(struct json_object *obj,double new_value);
Packit Service def718
Packit Service def718
Packit Service def718
Packit Service def718
/* string type methods */
Packit Service def718
Packit Service def718
/** Create a new empty json_object of type json_type_string
Packit Service def718
 *
Packit Service def718
 * A copy of the string is made and the memory is managed by the json_object
Packit Service def718
 *
Packit Service def718
 * @param s the string
Packit Service def718
 * @returns a json_object of type json_type_string
Packit Service def718
 */
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_string(const char *s);
Packit Service def718
Packit Service def718
JSON_EXPORT struct json_object* json_object_new_string_len(const char *s, int len);
Packit Service def718
Packit Service def718
/** Get the string value of a json_object
Packit Service def718
 *
Packit Service def718
 * If the passed object is of type json_type_null (i.e. obj == NULL),
Packit Service def718
 * NULL is returned.
Packit Service def718
 *
Packit Service def718
 * If the passed object of type json_type_string, the string contents
Packit Service def718
 * are returned.
Packit Service def718
 *
Packit Service def718
 * Otherwise the JSON representation of the object is returned.
Packit Service def718
 *
Packit Service def718
 * The returned string memory is managed by the json_object and will
Packit Service def718
 * be freed when the reference count of the json_object drops to zero.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns a string or NULL
Packit Service def718
 */
Packit Service def718
JSON_EXPORT const char* json_object_get_string(struct json_object *obj);
Packit Service def718
Packit Service def718
/** Get the string length of a json_object
Packit Service def718
 *
Packit Service def718
 * If the passed object is not of type json_type_string then zero
Packit Service def718
 * will be returned.
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @returns int
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_get_string_len(const struct json_object *obj);
Packit Service def718
Packit Service def718
Packit Service def718
/** Set the string value of a json_object with zero terminated strings
Packit Service def718
 * equivalent to json_object_set_string_len (obj, new_value, strlen(new_value))
Packit Service def718
 * @returns 1 if value is set correctly, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_set_string(json_object* obj, const char* new_value);
Packit Service def718
Packit Service def718
/** Set the string value of a json_object str
Packit Service def718
 * 
Packit Service def718
 * The type of obj is checked to be a json_type_string and 0 is returned 
Packit Service def718
 * if it is not without any further actions. If type of obj is json_type_string
Packit Service def718
 * the obect value is chaned to new_value
Packit Service def718
 *
Packit Service def718
 * @param obj the json_object instance
Packit Service def718
 * @param new_value the value to be set; Since string legth is given in len this need not be zero terminated
Packit Service def718
 * @param len the length of new_value
Packit Service def718
 * @returns 1 if value is set correctly, 0 otherwise
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_set_string_len(json_object* obj, const char* new_value, int len);
Packit Service def718
Packit Service def718
/** Check if two json_object's are equal
Packit Service def718
 *
Packit Service def718
 * If the passed objects are equal 1 will be returned.
Packit Service def718
 * Equality is defined as follows:
Packit Service def718
 * - json_objects of different types are never equal
Packit Service def718
 * - json_objects of the same primitive type are equal if the
Packit Service def718
 *   c-representation of their value is equal
Packit Service def718
 * - json-arrays are considered equal if all values at the same
Packit Service def718
 *   indices are equal (same order)
Packit Service def718
 * - Complex json_objects are considered equal if all
Packit Service def718
 *   contained objects referenced by their key are equal,
Packit Service def718
 *   regardless their order.
Packit Service def718
 *
Packit Service def718
 * @param obj1 the first json_object instance
Packit Service def718
 * @param obj2 the second json_object instance
Packit Service def718
 * @returns whether both objects are equal or not
Packit Service def718
 */
Packit Service def718
JSON_EXPORT int json_object_equal(struct json_object *obj1,
Packit Service def718
			     struct json_object *obj2);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Perform a shallow copy of src into *dst as part of an overall json_object_deep_copy().
Packit Service def718
 *
Packit Service def718
 * If src is part of a containing object or array, parent will be non-NULL,
Packit Service def718
 * and key or index will be provided.
Packit Service def718
 * When shallow_copy is called *dst will be NULL, and must be non-NULL when it returns.
Packit Service def718
 * src will never be NULL.
Packit Service def718
 *
Packit Service def718
 * If shallow_copy sets the serializer on an object, return 2 to indicate to 
Packit Service def718
 *  json_object_deep_copy that it should not attempt to use the standard userdata
Packit Service def718
 *  copy function.
Packit Service def718
 *
Packit Service def718
 * @return On success 1 or 2, -1 on errors
Packit Service def718
 */
Packit Service def718
typedef int (json_c_shallow_copy_fn)(json_object *src, json_object *parent, const char *key, size_t index, json_object **dst);
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * The default shallow copy implementation for use with json_object_deep_copy().
Packit Service def718
 * This simply calls the appropriate json_object_new_<type>() function and 
Packit Service def718
 * copies over the serializer function (_to_json_string internal field of
Packit Service def718
 * the json_object structure) but not any _userdata or _user_delete values.
Packit Service def718
 *
Packit Service def718
 * If you're writing a custom shallow_copy function, perhaps because you're using
Packit Service def718
 * your own custom serializer, you can call this first to create the new object
Packit Service def718
 * before customizing it with json_object_set_serializer().
Packit Service def718
 *
Packit Service def718
 * @return 1 on success, -1 on errors, but never 2.
Packit Service def718
 */
Packit Service def718
json_c_shallow_copy_fn json_c_shallow_copy_default;
Packit Service def718
Packit Service def718
/**
Packit Service def718
 * Copy the contents of the JSON object.
Packit Service def718
 * The destination object must be initialized to NULL,
Packit Service def718
 * to make sure this function won't overwrite an existing JSON object.
Packit Service def718
 *
Packit Service def718
 * This does roughly the same thing as
Packit Service def718
 * `json_tokener_parse(json_object_get_string(src))`.
Packit Service def718
 *
Packit Service def718
 * @param src source JSON object whose contents will be copied
Packit Service def718
 * @param dst pointer to the destination object where the contents of `src`;
Packit Service def718
 *            make sure this pointer is initialized to NULL
Packit Service def718
 * @param shallow_copy an optional function to copy individual objects, needed
Packit Service def718
 *                     when custom serializers are in use.  See also
Packit Service def718
 *                     json_object set_serializer.
Packit Service def718
 *
Packit Service def718
 * @returns 0 if the copy went well, -1 if an error occured during copy
Packit Service def718
 *          or if the destination pointer is non-NULL
Packit Service def718
 */
Packit Service def718
Packit Service def718
JSON_EXPORT int json_object_deep_copy(struct json_object *src, struct json_object **dst, json_c_shallow_copy_fn *shallow_copy); 
Packit Service def718
#ifdef __cplusplus
Packit Service def718
}
Packit Service def718
#endif
Packit Service def718
Packit Service def718
#endif