rem: return 0;
add: return -1;
context: compareKeys(type_code type,const void *key1, int keyLength1, const void *key2, int keyLength2){	// if one of the keys is NULL, bail out gracefully	if (key1 == NULL || key2 == NULL)		return -1;	switch (type)	{	    case B_STRING_TYPE:    	{			int len = min_c(keyLength1,keyLength2);			int result = strncmp((const char *)key1,(const char *)key2,len);						if (result == 0				&& !(((const char *)key1)[len] == '\0' && ((const char *)key2)[len] == '\0'))				result = keyLength1 - keyLength2;			return result;		}		case B_INT32_TYPE:			return *(int32 *)key1 - *(int32 *)key2;					case B_UINT32_TYPE:		{			if (*(uint32 *)key1 == *(uint32 *)key2)				return 0;			else if (*(uint32 *)key1 > *(uint32 *)key2)				return 1;			return -1;		}					case B_INT64_TYPE:		{			if (*(int64 *)key1 == *(int64 *)key2)				return 0;			else if (*(int64 *)key1 > *(int64 *)key2)				return 1;			return -1;		}		case B_UINT64_TYPE:		{			if (*(uint64 *)key1 == *(uint64 *)key2)				return 0;			else if (*(uint64 *)key1 > *(uint64 *)key2)				return 1;			return -1;		}		case B_FLOAT_TYPE:		{			float result = *(float *)key1 - *(float *)key2;			if (result == 0.0f)				return 0;			return (result < 0.0f) ? -1 : 1;		}		case B_DOUBLE_TYPE:		{			double result = *(double *)key1 - *(double *)key2;			if (result == 0.0)				return 0;			return (result < 0.0) ? -1 : 1;		}	}	return 0;}