/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_WSDXMLDOM
#define _INC_WSDXMLDOM

#ifndef _INC_WSDAPI
#error Please include wsdapi.h instead of this header. This header cannot be used directly.
#endif

#if (_WIN32_WINNT >= 0x0600)

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _WSDXML_TYPE {
  WCHAR *Uri;
  BYTE  *Table;
} WSDXML_TYPE;

typedef const WSDXML_TYPE *PCWSDXML_TYPE;

typedef struct _WSDXML_NAMESPACE {
  const WCHAR *Uri;
  const WCHAR *PreferredPrefix;
  WSDXML_NAME *Names;
  WORD        NamesCount;
  WORD        Encoding;
} WSDXML_NAMESPACE;

typedef const WSDXML_NAMESPACE *PCWSDXML_NAMESPACE;

typedef struct _WSDXML_NAME {
  WSDXML_NAMESPACE *Space;
  WCHAR            *LocalName;
} WSDXML_NAME;

typedef struct _WSDXML_NODE {
  enum DUMMYUNIONNAME {
     ElementType,
     TextType
  }           Type;
  WSDXML_ELEMENT *Parent;
  WSDXML_NODE    *Next;
} WSDXML_NODE;

typedef struct _WSDXML_TEXT {
  WSDXML_NODE Node;
  WCHAR       *Text;
} WSDXML_TEXT;

typedef struct _WSDXML_ATTRIBUTE {
  WSDXML_ELEMENT   *Element;
  WSDXML_ATTRIBUTE *Next;
  WSDXML_NAME      *Name;
  WCHAR            *Value;
} WSDXML_ATTRIBUTE;

typedef struct _WSDXML_PREFIX_MAPPING {
  DWORD                 Refs;
  WSDXML_PREFIX_MAPPING *Next;
  WSDXML_NAMESPACE      *Space;
  WCHAR                 *Prefix;
} WSDXML_PREFIX_MAPPING;

typedef struct _WSDXML_ELEMENT {
  WSDXML_NODE           Node;
  WSDXML_NAME           *Name;
  WSDXML_ATTRIBUTE      *FirstAttribute;
  WSDXML_NODE           *FirstChild;
  WSDXML_PREFIX_MAPPING *PrefixMappings;
} WSDXML_ELEMENT;

typedef struct _WSDXML_ELEMENT_LIST {
  WSDXML_ELEMENT_LIST *Next;
  WSDXML_ELEMENT      *Element;
} WSDXML_ELEMENT_LIST;

#ifdef __cplusplus
}
#endif
#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_WSDXMLDOM*/
