All pastes #792139 Raw Edit

pikhq

public c v1 · immutable
·published 2007-11-21 04:58 UTC
rendered paste body
#include "psl_object.h"#include "error.h"extern psl_object psl_object_null = (psl_object){ 1, &psl_object_null, NULL, 0, (psl_member_node){}};psl_object *psl_object_new(psl_object *parent, size_t datalength, void *data){	psl_object *retval = malloc(sizeof(psl_object));	if(retval == NULL)		ERROR("Out of memory.\n");	*retval = (psl_object){ 1, parent, (psl_member_node){}, datalength, data };	return retval;}psl_object *psl_get_member(char *name, psl_object *object){	if(!strcmp(name, "null"))		return psl_object_null; recurse:	psl_member_node *cur = object->members;	int cmp = strcmp(name, cur->name);	if(!cmp)		return cur->o;	else if (cmp < 0) {		if (cur->left) {			cur = cur->left;			goto recurse;		} else			return NULL;	} else {		if (cur->right) {			object = cur->right;			goto recurse;		} else			return NULL;	}}void psl_add_member(psl_object *object, psl_member_node member){ recurse:	psl_member_node *cur = object->members;	int cmp = strcmp(cur->name, member.name);	if(!cmp) {		member.o.refs = cur->o->refs;		cur->o = member.o;		return;	} else if (cmp > 0) {		if (cur->left) {			cur = cur->left;			goto recurse;		} else {			cur->left = member;			return;		}	} else {		if (cur->right) {			cur = cur->right;			goto recurse;		} else {			cur->right = member;			return;		}	}}