/*
 * Portions of this file Copyright 1999-2005 University of Chicago
 * Portions of this file Copyright 1999-2005 The University of Southern California.
 *
 * This file or a portion of this file is licensed under the
 * terms of the Globus Toolkit Public License, found at
 * http://www.globus.org/toolkit/download/license.html.
 * If you redistribute this file, with or without
 * modifications, you must include this notice in the file.
 */

#ifndef GLOBUS_XSD_TYPE_REGISTRY_H
#define GLOBUS_XSD_TYPE_REGISTRY_H 1

#include "globus_common.h"

EXTERN_C_BEGIN

typedef struct globus_xsd_type_registry_s * globus_xsd_type_registry_t;

#include "globus_xsd_type_info.h"

globus_result_t
globus_xsd_type_registry_init(
    globus_xsd_type_registry_t *        registry);

globus_result_t
globus_xsd_type_registry_destroy(
    globus_xsd_type_registry_t          registry);

globus_result_t
globus_xsd_type_registry_insert(
    globus_xsd_type_registry_t          registry,
    globus_xsd_type_info_t              new_info,
    globus_xsd_type_info_t *            old_info);

globus_result_t
globus_xsd_type_registry_remove(
    globus_xsd_type_registry_t          registry,
    const xsd_QName *                   name,
    globus_xsd_type_info_t *            info);

globus_result_t
globus_xsd_type_registry_clear(
    globus_xsd_type_registry_t          registry);

globus_result_t
globus_xsd_type_registry_get(
    globus_xsd_type_registry_t          registry,
    const xsd_QName *                   qname,
    globus_xsd_type_info_t *            info);

globus_result_t
globus_xsd_type_registry_set_default(
    globus_xsd_type_registry_t          registry,
    globus_xsd_type_info_t              info);

globus_result_t
globus_xsd_type_registry_get_default(
    globus_xsd_type_registry_t          registry,
    globus_xsd_type_info_t *            info);

globus_result_t
globus_xsd_type_registry_add_base_types(
    globus_xsd_type_registry_t          registry);

globus_result_t
globus_xsd_type_registry_dump(
    globus_xsd_type_registry_t               registry);

EXTERN_C_END

#endif /* GLOBUS_XSD_TYPE_REGISTRY_H */
