コード例 #1
0
ファイル: list.c プロジェクト: gitter-badger/cparse
void cparse_list_prepend(cParseList *list, void *element)
{
	cParseListNode *node = malloc(sizeof(cParseListNode));

	if (node == NULL) {
		cparse_log_errno(ENOMEM);
		return;
	}

	node->data = malloc(list->node_size);

	if (node->data == NULL) {
		cparse_log_errno(ENOMEM);
		return;
	}

	memcpy(node->data, element, list->node_size);

	node->next = list->head;
	list->head = node;

	if (!list->tail) {
		list->tail = list->head;
	}

	list->length++;
}
コード例 #2
0
ファイル: list.c プロジェクト: gitter-badger/cparse
void cparse_list_append(cParseList *list, void *element)
{
	cParseListNode *node;

	if (list == NULL || element == NULL) {
		cparse_log_errno(EINVAL);
		return;
	}

	node = malloc(sizeof(cParseListNode));

	if (node == NULL) {
		cparse_log_errno(ENOMEM);
		return;
	}

	node->data = malloc(list->node_size);

	if (node->data == NULL) {
		cparse_log_errno(ENOMEM);
		return;
	}

	memcpy(node->data, element, list->node_size);

	if (list->tail == NULL) {
		list->head = list->tail = node;
	} else {
		list->tail->next = node;
		list->tail = node;
	}

	list->length++;
}
コード例 #3
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQueryBuilder *cparse_query_build_related_to(cParseQueryBuilder *query, const char *key, cParseObject *obj)
{
    cParseJson *inner = NULL;
    cParseJson *pointer = NULL;

    if (query == NULL || obj == NULL) {
        cparse_log_errno(EINVAL);
        return NULL;
    }

    inner = cparse_json_new();

    if (inner == NULL) {
        return query;
    }

    pointer = cparse_pointer_from_object(obj);

    cparse_json_set(inner, "object", pointer);

    cparse_json_set_string(inner, "key", key);

    cparse_json_set(query->json, CPARSE_QUERY_RELATED_TO, inner);

    return query;
}
コード例 #4
0
ファイル: list.c プロジェクト: gitter-badger/cparse
cParseListNode *cparse_list_head(cParseList *list) {
	if (list == NULL) {
		cparse_log_errno(EINVAL);
		return NULL;
	}

	return list->head;
}
コード例 #5
0
ファイル: role.c プロジェクト: gitter-badger/cparse
void cparse_role_add_role(cParseRole *role, cParseRole *other) {
	if (!role || !other) {
		cparse_log_errno(EINVAL);
		return;
	}

	__cparse_role_add_dependency(role, CPARSE_ROLES_PATH, other);
}
コード例 #6
0
ファイル: list.c プロジェクト: gitter-badger/cparse
cParseListNode *cparse_list_tail(cParseList *list) {
	if (list == NULL) {
		cparse_log_errno(EINVAL);
		return NULL;
	}

	return list->tail;
}
コード例 #7
0
ファイル: list.c プロジェクト: gitter-badger/cparse
void *cparse_list_get(cParseListNode *node) {
	if (node == NULL) {
		cparse_log_errno(EINVAL);
		return NULL;
	}

	return node->data;
}
コード例 #8
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseJson *cparse_query_build_json(cParseQueryBuilder *query)
{
    if (query == NULL) {
        cparse_log_errno(EINVAL);
        return NULL;
    }
    return query->json;
}
コード例 #9
0
ファイル: role.c プロジェクト: gitter-badger/cparse
void cparse_role_add_user(cParseRole *role, cParseUser *user) {
	if (!role || !user) {
		cparse_log_errno(EINVAL);
		return;
	}

	__cparse_role_add_dependency(role, CPARSE_USERS_PATH, user);
}
コード例 #10
0
ファイル: list.c プロジェクト: gitter-badger/cparse
cParseListNode *cparse_list_next(cParseListNode *node) {
	if (node == NULL) {
		cparse_log_errno(EINVAL);
		return NULL;
	}

	return node->next;
}
コード例 #11
0
ファイル: query.c プロジェクト: ryjen/cparse
void cparse_query_where_all(cParseQuery *query, const char *key, cParseJson *value)
{
    cParseQueryBuilder *builder = NULL;

    if (query == NULL || cparse_str_empty(key) || value == NULL) {
        cparse_log_errno(EINVAL);
        return;
    }

    builder = cparse_query_build_new();

    if (builder == NULL) {
        cparse_log_errno(ENOMEM);
        return;
    }

    cparse_query_build_all(builder, key, value);

    cparse_query_build_where(query, builder);

    cparse_query_build_free(builder);
}
コード例 #12
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQueryBuilder *cparse_query_build_new()
{
    cParseQueryBuilder *builder = malloc(sizeof(cParseQueryBuilder));

    if (builder == NULL) {
        cparse_log_errno(ENOMEM);
        return NULL;
    }

    builder->json = cparse_json_new();

    return builder;
}
コード例 #13
0
ファイル: query.c プロジェクト: ryjen/cparse
void cparse_query_set_where(cParseQuery *query, cParseJson *value)
{
    if (query == NULL || value == NULL) {
        cparse_log_errno(EINVAL);
        return;
    }

    if (query->where) {
        cparse_json_free(query->where);
    }

    query->where = cparse_json_new_reference(value);
}
コード例 #14
0
ファイル: query.c プロジェクト: ryjen/cparse
void cparse_query_build_where(cParseQuery *query, cParseQueryBuilder *builder)
{
    if (query == NULL || builder == NULL || builder->json == NULL) {
        cparse_log_errno(EINVAL);
        return;
    }

    if (query->where) {
        cparse_json_free(query->where);
    }

    query->where = cparse_json_new_reference(builder->json);
}
コード例 #15
0
ファイル: list.c プロジェクト: gitter-badger/cparse
void cparse_list_foreach(cParseList *list, cParseIteratorFunk funk, void *param)
{
	size_t pos = 0;
	cParseListNode *node = NULL;

	if (list == NULL || funk == NULL) {
		cparse_log_errno(EINVAL);
		return;
	}

	for (node = list->head; node != NULL; node = node->next, ++pos) {
		funk(list, pos, node->data, param);
	}
}
コード例 #16
0
ファイル: error.c プロジェクト: gitter-badger/cparse
cParseError *cparse_error_new()
{
    cParseError *e = malloc(sizeof(cParseError));

    if (e == NULL)
    {
        cparse_log_errno(ENOMEM);
        return NULL;
    }

    e->code = 0;
    e->message = NULL;

    return e;
}
コード例 #17
0
ファイル: list.c プロジェクト: gitter-badger/cparse
cParseList *cparse_list_new(size_t elementSize, cParseListFreeFunk free)
{
	cParseList *list = malloc(sizeof(cParseList));

	if (list == NULL) {
		cparse_log_errno(ENOMEM);
		return NULL;
	}

	list->head = NULL;
	list->tail = NULL;
	list->free_fn = free;
	list->node_size = elementSize;
	list->length = 0;

	return list;
}
コード例 #18
0
ファイル: role.c プロジェクト: gitter-badger/cparse
static void __cparse_role_add_dependency(cParseRole *role, const char *key, cParseObject *ref)
{
	cParseJson *users = NULL;
	cParseJson *objects = NULL;
	cParseJson *pointer = NULL;

	if (!role || cparse_str_empty(key) || !ref) {
		cparse_log_errno(EINVAL);
		return;
	}

	/* only allow certain values for key/pointer type */
	if (strcmp(key, CPARSE_USERS_PATH) && strcmp(key, CPARSE_ROLES_PATH))
	{
		cparse_log_error("can only by of type users or roles");
		return;
	}

	users = cparse_object_get(role, key);

	if (users == NULL) {
		users = cparse_json_new();
		cparse_json_set_string(users, CPARSE_KEY_OP, CPARSE_KEY_ADD_RELATION);
		cparse_object_set(role, key, users);
	}

	objects = cparse_json_get(users, "objects");

	if (objects == NULL) {
		objects = cparse_json_new_array();
		cparse_json_set(users, "objects", objects);
	}

	if (!cparse_json_is_array(objects)) {
		cparse_log_error("objects is not an array");
		return;
	}

	pointer = cparse_pointer_from_object(ref);

	cparse_json_array_add(objects, pointer);
}
コード例 #19
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQuery *cparse_query_for_object(cParseObject *obj)
{
    cParseQuery *query = NULL;

    if (obj == NULL) {
        cparse_log_errno(EINVAL);
        return NULL;
    }

    query = cparse_query_new();

    if (query == NULL) {
        return NULL;
    }

    query->className = strdup(obj->className);
    query->urlPath = strdup(obj->urlPath);

    return query;
}
コード例 #20
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQueryBuilder *cparse_query_build_lte(cParseQueryBuilder *query, const char *key, cParseJson *value)
{
    cParseJson *lte = NULL;

    if (query == NULL || cparse_str_empty(key) || value == NULL) {
        cparse_log_errno(EINVAL);
        return NULL;
    }

    lte = cparse_json_new();

    if (lte == NULL) {
        return query;
    }

    cparse_json_set(lte, CPARSE_QUERY_LESS_THAN_EQUAL, value);

    cparse_json_set(query->json, key, lte);

    return query;
}
コード例 #21
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQueryBuilder *cparse_query_build_nin(cParseQueryBuilder *query, const char *key, cParseJson *inArray)
{
    cParseJson *inner = NULL;

    if (query == NULL || cparse_str_empty(key) || inArray == NULL) {
        cparse_log_errno(EINVAL);
        return NULL;
    }

    inner = cparse_json_new();

    if (inner == NULL) {
        return query;
    }

    cparse_json_set(inner, CPARSE_QUERY_NOT_IN, inArray);

    cparse_json_set(query->json, key, inner);

    return query;
}
コード例 #22
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQueryBuilder *cparse_query_build_all(cParseQueryBuilder *query, const char *key, cParseJson *value)
{
    cParseJson *inner = NULL;

    if (query == NULL || cparse_str_empty(key) || value == NULL) {
        cparse_log_errno(EINVAL);
        return NULL;
    }

    inner = cparse_json_new();

    if (inner == NULL) {
        return query;
    }

    cparse_json_set(inner, CPARSE_QUERY_ALL, value);

    cparse_json_set(query->json, key, inner);

    return query;
}
コード例 #23
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQuery *cparse_query_new()
{
    cParseQuery *query = malloc(sizeof(cParseQuery));

    if (query == NULL) {
        cparse_log_errno(ENOMEM);
        return NULL;
    }

    query->className = NULL;
    query->urlPath = NULL;
    query->limit = 0;
    query->skip = 0;
    query->trace = false;
    query->where = NULL;
    query->results = NULL;
    query->keys = NULL;
    query->count = false;
    query->size = 0;

    return query;
}
コード例 #24
0
ファイル: query.c プロジェクト: ryjen/cparse
cParseQuery *cparse_query_with_class_name(const char *className)
{
    char buf[CPARSE_BUF_SIZE + 1] = {0};
    cParseQuery *query = NULL;

    if (cparse_str_empty(className)) {
        cparse_log_errno(EINVAL);
        return NULL;
    }

    query = cparse_query_new();

    if (query == NULL) {
        return NULL;
    }

    query->className = strdup(className);

    snprintf(buf, CPARSE_BUF_SIZE, "%s%s", CPARSE_OBJECTS_PATH, className);

    query->urlPath = strdup(buf);

    return query;
}