add description
This commit is contained in:
@@ -63,6 +63,7 @@ struct heim_type_data array_object = {
|
|||||||
array_dealloc,
|
array_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -42,6 +42,7 @@ struct heim_type_data _heim_bool_object = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -80,7 +80,8 @@ struct heim_type_data _heim_data_object = {
|
|||||||
data_dealloc,
|
data_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
data_cmp,
|
data_cmp,
|
||||||
data_hash
|
data_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -94,6 +94,7 @@ struct heim_type_data db_object = {
|
|||||||
db_dealloc,
|
db_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -71,6 +71,7 @@ struct heim_type_data dict_object = {
|
|||||||
dict_dealloc,
|
dict_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -72,7 +72,8 @@ struct heim_type_data _heim_error_object = {
|
|||||||
error_dealloc,
|
error_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
error_cmp,
|
error_cmp,
|
||||||
error_hash
|
error_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
heim_error_t
|
heim_error_t
|
||||||
|
@@ -138,6 +138,20 @@ heim_release(void *ptr)
|
|||||||
heim_abort("over release");
|
heim_abort("over release");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If used require wrapped in autorelease pool
|
||||||
|
*/
|
||||||
|
|
||||||
|
heim_string_t
|
||||||
|
heim_description(heim_object_t ptr)
|
||||||
|
{
|
||||||
|
struct heim_base *p = PTR2BASE(ptr);
|
||||||
|
if (p->isa->desc == NULL)
|
||||||
|
return heim_auto_release(heim_string_ref_create(p->isa->name, NULL));
|
||||||
|
return heim_auto_release(p->isa->desc(ptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_heim_make_permanent(heim_object_t ptr)
|
_heim_make_permanent(heim_object_t ptr)
|
||||||
{
|
{
|
||||||
@@ -254,6 +268,7 @@ struct heim_type_data memory_object = {
|
|||||||
memory_dealloc,
|
memory_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -290,7 +305,8 @@ _heim_create_type(const char *name,
|
|||||||
heim_type_dealloc dealloc,
|
heim_type_dealloc dealloc,
|
||||||
heim_type_copy copy,
|
heim_type_copy copy,
|
||||||
heim_type_cmp cmp,
|
heim_type_cmp cmp,
|
||||||
heim_type_hash hash)
|
heim_type_hash hash,
|
||||||
|
heim_type_description desc)
|
||||||
{
|
{
|
||||||
heim_type_t type;
|
heim_type_t type;
|
||||||
|
|
||||||
@@ -305,6 +321,7 @@ _heim_create_type(const char *name,
|
|||||||
type->copy = copy;
|
type->copy = copy;
|
||||||
type->cmp = cmp;
|
type->cmp = cmp;
|
||||||
type->hash = hash;
|
type->hash = hash;
|
||||||
|
type->desc = desc;
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
@@ -509,7 +526,8 @@ static struct heim_type_data _heim_autorel_object = {
|
|||||||
autorel_dealloc,
|
autorel_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
autorel_cmp,
|
autorel_cmp,
|
||||||
autorel_hash
|
autorel_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -548,7 +566,7 @@ heim_auto_release_create(void)
|
|||||||
* @param ptr object
|
* @param ptr object
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
heim_object_t
|
||||||
heim_auto_release(heim_object_t ptr)
|
heim_auto_release(heim_object_t ptr)
|
||||||
{
|
{
|
||||||
struct heim_base *p = PTR2BASE(ptr);
|
struct heim_base *p = PTR2BASE(ptr);
|
||||||
@@ -556,7 +574,7 @@ heim_auto_release(heim_object_t ptr)
|
|||||||
heim_auto_release_t ar;
|
heim_auto_release_t ar;
|
||||||
|
|
||||||
if (ptr == NULL || heim_base_is_tagged(ptr))
|
if (ptr == NULL || heim_base_is_tagged(ptr))
|
||||||
return;
|
return ptr;
|
||||||
|
|
||||||
/* drop from old pool */
|
/* drop from old pool */
|
||||||
if ((ar = p->autorelpool) != NULL) {
|
if ((ar = p->autorelpool) != NULL) {
|
||||||
@@ -573,6 +591,8 @@ heim_auto_release(heim_object_t ptr)
|
|||||||
HEIM_TAILQ_INSERT_HEAD(&ar->pool, p, autorel);
|
HEIM_TAILQ_INSERT_HEAD(&ar->pool, p, autorel);
|
||||||
p->autorelpool = ar;
|
p->autorelpool = ar;
|
||||||
HEIMDAL_MUTEX_unlock(&ar->pool_mutex);
|
HEIMDAL_MUTEX_unlock(&ar->pool_mutex);
|
||||||
|
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -177,6 +177,7 @@ heim_string_t heim_string_ref_create(const char *, heim_string_free_f_t);
|
|||||||
heim_string_t heim_string_create_with_bytes(const void *, size_t);
|
heim_string_t heim_string_create_with_bytes(const void *, size_t);
|
||||||
heim_string_t heim_string_ref_create_with_bytes(const void *, size_t,
|
heim_string_t heim_string_ref_create_with_bytes(const void *, size_t,
|
||||||
heim_string_free_f_t);
|
heim_string_free_f_t);
|
||||||
|
heim_string_t heim_string_create_with_format(const char *, ...);
|
||||||
heim_tid_t heim_string_get_type_id(void);
|
heim_tid_t heim_string_get_type_id(void);
|
||||||
const char * heim_string_get_utf8(heim_string_t);
|
const char * heim_string_get_utf8(heim_string_t);
|
||||||
|
|
||||||
@@ -336,7 +337,7 @@ typedef struct heim_auto_release * heim_auto_release_t;
|
|||||||
|
|
||||||
heim_auto_release_t heim_auto_release_create(void);
|
heim_auto_release_t heim_auto_release_create(void);
|
||||||
void heim_auto_release_drain(heim_auto_release_t);
|
void heim_auto_release_drain(heim_auto_release_t);
|
||||||
void heim_auto_release(heim_object_t);
|
heim_object_t heim_auto_release(heim_object_t);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* JSON
|
* JSON
|
||||||
@@ -362,6 +363,13 @@ heim_string_t heim_serialize(heim_object_t, heim_json_flags_t flags,
|
|||||||
heim_error_t *);
|
heim_error_t *);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Debug
|
||||||
|
*/
|
||||||
|
|
||||||
|
heim_string_t
|
||||||
|
heim_description(heim_object_t ptr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Binary search.
|
* Binary search.
|
||||||
*
|
*
|
||||||
|
@@ -37,6 +37,7 @@ typedef void (*heim_type_init)(void *);
|
|||||||
typedef heim_object_t (*heim_type_copy)(void *);
|
typedef heim_object_t (*heim_type_copy)(void *);
|
||||||
typedef int (*heim_type_cmp)(void *, void *);
|
typedef int (*heim_type_cmp)(void *, void *);
|
||||||
typedef unsigned long (*heim_type_hash)(void *);
|
typedef unsigned long (*heim_type_hash)(void *);
|
||||||
|
typedef heim_string_t (*heim_type_description)(void *);
|
||||||
|
|
||||||
typedef struct heim_type_data *heim_type_t;
|
typedef struct heim_type_data *heim_type_t;
|
||||||
|
|
||||||
@@ -69,6 +70,7 @@ struct heim_type_data {
|
|||||||
heim_type_copy copy;
|
heim_type_copy copy;
|
||||||
heim_type_cmp cmp;
|
heim_type_cmp cmp;
|
||||||
heim_type_hash hash;
|
heim_type_hash hash;
|
||||||
|
heim_type_description desc;
|
||||||
};
|
};
|
||||||
|
|
||||||
heim_type_t _heim_get_isa(heim_object_t);
|
heim_type_t _heim_get_isa(heim_object_t);
|
||||||
@@ -79,7 +81,8 @@ _heim_create_type(const char *name,
|
|||||||
heim_type_dealloc dealloc,
|
heim_type_dealloc dealloc,
|
||||||
heim_type_copy copy,
|
heim_type_copy copy,
|
||||||
heim_type_cmp cmp,
|
heim_type_cmp cmp,
|
||||||
heim_type_hash hash);
|
heim_type_hash hash,
|
||||||
|
heim_type_description desc);
|
||||||
|
|
||||||
heim_object_t
|
heim_object_t
|
||||||
_heim_alloc_object(heim_type_t type, size_t size);
|
_heim_alloc_object(heim_type_t type, size_t size);
|
||||||
|
@@ -42,6 +42,7 @@ struct heim_type_data _heim_null_object = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -73,7 +73,8 @@ struct heim_type_data _heim_number_object = {
|
|||||||
number_dealloc,
|
number_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
number_cmp,
|
number_cmp,
|
||||||
number_hash
|
number_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -91,7 +91,8 @@ struct heim_type_data _heim_string_object = {
|
|||||||
string_dealloc,
|
string_dealloc,
|
||||||
NULL,
|
NULL,
|
||||||
string_cmp,
|
string_cmp,
|
||||||
string_hash
|
string_hash,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -158,6 +159,45 @@ heim_string_create_with_bytes(const void *data, size_t len)
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
string_free(void *ptr)
|
||||||
|
{
|
||||||
|
free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a string object using a format string
|
||||||
|
*
|
||||||
|
* @param fmt format string
|
||||||
|
* @param ...
|
||||||
|
*
|
||||||
|
* @return string object
|
||||||
|
*/
|
||||||
|
|
||||||
|
heim_string_t
|
||||||
|
heim_string_create_with_format(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
heim_string_t s;
|
||||||
|
char *str = NULL;
|
||||||
|
va_list ap;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
ret = vasprintf(&str, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
if (ret < 0 || str == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
s = heim_string_ref_create(str, string_dealloc);
|
||||||
|
if (s == NULL)
|
||||||
|
free(str);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the type ID of string objects
|
* Return the type ID of string objects
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user