/*
 * $Id$
 *
 * Copyright © 2003 Keith Packard
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Keith Packard not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Keith Packard makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */
@RET@		FcObjectSet *
@FUNC@		FcObjectSetCreate
@TYPE1@		void
@PURPOSE@	Create an object set
@DESC@
Creates an empty set.
@@

@RET@		FcBool
@FUNC@		FcObjectSetAdd
@TYPE1@		FcObjectSet *			@ARG1@		os
@TYPE2@		const char *			@ARG2@		object
@PURPOSE@	Add to an object set
@DESC@
Adds a proprety name to the set.
@@

@RET@		void
@FUNC@		FcObjectSetDestroy
@TYPE1@		FcObjectSet *			@ARG1@		os
@PURPOSE@	Destroy an object set
@DESC@
Destroys an object set.
@@

@RET@		FcObjectSet *
@FUNC@		FcObjectSetBuild
@TYPE1@		const char *			@ARG1@		first
@TYPE2@		...
@PROTOTYPE+@
@RET+@		FcObjectSet *
@FUNC+@		FcObjectSetVaBuild
@TYPE1+@	const char *			@ARG1+@		first
@TYPE2+@	va_list				@ARG2+@		va
@PURPOSE@	Build object set from args
@DESC@
These build an object set from a null-terminated list of property names.
@@
