#include "GuiTypeDescriptorBuilder.h"
namespace
 
{
	
using
 namespace
 collections
;
	
namespace
 
	{
		
namespace
 
		{
#ifndef VCZH_DEBUG_NO_REFLECTION
			::
(
* 
, 
 )
				:typeDescriptor(
)
				, hint(
)
			{
			}
			
::
()
			{
			}
			
::
 ::
()
			{
				
return
 ::
;
			}
			
 ::
()
			{
				
return
 ;
			}
			
* 
::
()
			{
				
return
 nullptr
;
			}
			
* 
::
()
			{
				
return
 ;
			}
			
 ::
()
			{
				
return
 0
;
			}
			
* 
::
(
 )
			{
				
return
 nullptr
;
			}
			
 ::
()
			{
				
return
 ->
();
			}
			
::
(
<
> 
)
				:elementType(
)
			{
			}
			
::
()
			{
			}
			
 ::
()
			{
				
return
 ();
			}
			
* 
::
()
			{
				
return
 .
();
			}
			
* 
::
()
			{
				
return
 ();
			}
			
 ::
()
			{
				
return
 0
;
			}
			
* 
::
(
 )
			{
				
return
 nullptr
;
			}
			
::
(
<
> 
)
				:
(
)
			{
			}
			
::
()
			{
			}
			
::
 ::
()
			{
				
return
 ::
;
			}
			
 ::
()
			{
				
return
 () + 
L"*"
;
			}
			
::
(
<
> 
)
				:
(
)
			{
			}
			
::
()
			{
			}
			
::
 ::
()
			{
				
return
 ::
;
			}
			
 ::
()
			{
				
return
 () + 
L"^"
;
			}
			
::
(
<
> 
)
				:
(
)
			{
			}
			
::
()
			{
			}
			
::
 ::
()
			{
				
return
 ::
;
			}
			
 ::
()
			{
				
return
 () + 
L"?"
;
			}
			
::
(
<
> 
)
				:
(
)
			{
			}
			
::
()
			{
			}
			
::
 ::
()
			{
				
return
 ::
;
			}
			
 ::
()
			{
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
return
 ].
();
			}
			
 ::
()
			{
				
  = 
() + 
L"<"
;
				FOREACH_INDEXER(Ptr<ITypeInfo>, type, i, genericArguments)
				if
(
bool
 =
true
) 
for
(
const
 ::
vl
::
collections
::
<
<
>>& 
 = ::
vl
::
collections
::
(
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
) 
if
(
bool
 =
true
) 
for
(
  = 
0
;
__scope_variable_flag__
;
__scope_variable_flag__
=
false
) 
for
(
<
> 
;
__foreach_iterator__
.
(
type
);
i
++)
 
				{
					
if
 (
i
>
0
) 
result
 += 
L", "
;
					
result
  type
();
				}
				
result
 += 
L">"
;
				
return
 result
;
			}
			
void
 ::
(
<
> 
)
			{
				
.
(
);
			}
#endif
#ifndef VCZH_DEBUG_NO_REFLECTION
			const
 & 
::
()
			{
				
return
 ;
			}
			
const
 * 
::
GetTypeInfoContentInternal
()
			{
				
return
 ;
			}
			
::
(
 , 
const
 * 
)
				:typeDescriptorFlags(
)
				, typeInfoContent(
)
				, typeName(
->
, 
false
)
			{
				
switch
 (
->
)
				{
				
case
 ::
:
					
break
;
				
case
 ::
:
					
  (
->
, 
false
);
					
break
;
				
case
 ::
:
					
  (
->
, 
false
);
					
break
;
				}
			}
			
::
()
			{
			}
			
::
* 
::
()
			{
				
return
 ->
 == 
::
 ? 
nullptr
 : 
this
;
			}
			
 ::
()
			{
				
return
 ;
			}
			
const
 & 
::
()
			{
				
return
 ;
			}
			
void
 ::
()
			{
			}
			
void
 ::
()
			{
				
if
 (!
)
				{
					
 = 
true
;
					
();
				}
			}
			
::
(
 , 
const
 * 
)
				:
(
, 
)
				, loaded(
false
)
			{
			}
			
::
()
			{
			}
			
bool
 ::
()
			{
				
return
 false
;
			}
			
* 
::
()
			{
				
();
				
return
 .
();
			}
			
* 
::
()
			{
				
();
				
return
 .
();
			}
			
* 
::
()
			{
				
();
				
return
 .
();
			}
			
 ::
GetBaseTypeDescriptorCount
()
			{
				
return
 0
;
			}
			
* 
::
(
 )
			{
				
return
 0
;
			}
			
bool
 ::
(
* 
)
			{
				
return
 this
 == 
;
			}
			
 ::
()
			{
				
return
 0
;
			}
			
* 
::
(
 )
			{
				
return
 0
;
			}
			
bool
 ::
(
const
 & 
, 
bool
 )
			{
				
return
 false
;
			}
			
* 
::
(
const
 & 
, 
bool
 )
			{
				
return
 0
;
			}
			
 ::
()
			{
				
return
 0
;
			}
			
* 
::
(
 )
			{
				
return
 0
;
			}
			
bool
 ::
(
const
 & 
, 
bool
 )
			{
				
return
 false
;
			}
			
* 
::
(
const
 & 
, 
bool
 )
			{
				
return
 0
;
			}
			
 ::
()
			{
				
return
 0
;
			}
			
* 
::
(
 )
			{
				
return
 0
;
			}
			
bool
 ::
(
const
 & 
, 
bool
 )
			{
				
return
 false
;
			}
			
* 
::
(
const
 & 
, 
bool
 )
			{
				
return
 0
;
			}
			
* 
::
()
			{
				
return
 0
;
			}
			
::
(
* 
, 
const
 & 
, 
<
> 
)
				:ownerMethod(
)
				,name(
)
				,type(
)
			{
			}
			
::
()
			{
			}
			
* 
::
()
			{
				
return
 ->
();
			}
			
const
 & 
::
()
			{
				
return
 ;
			}
			
* 
::
()
			{
				
return
 .
();
			}
			
* 
::
()
			{
				
return
 ;
			}
			
::
(
* 
, 
<
> 
, 
bool
 )
				:ownerMethodGroup(
)
				,ownerProperty(
0
)
				,returnInfo(
)
				,isStatic(
)
			{
			}
			
::
()
			{
			}
			
* 
::
()
			{
				
return
 ->
();
			}
			
* 
::
()
			{
				
return
 ;
			}
			
const
 & 
::
()
			{
				
return
 ->
();
			}
			
* 
::
()
			{
				
return
 ;
			}
			
 ::
()
			{
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
if
(
0
<=
 && 
<
.
())
				{
					
return
 ].
();
				}
				
else
				{
					
return
 0
;
				}
			}
			
* 
::
()
			{
				
return
 .
();
			}
			
bool
 ::
()
			{
				
return
 ;
			}
			
void
 ::
(
collections
::
<
>& 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
()!=
.
())
				{
					
throw
 ArgumentCountMismtatchException
(
);
				}
				
for
(
 =
0
;
i
<
.
();
i
++)
				{
					
if
(!
i
].
(
i
]
()))
					{
						
throw
 ArgumentTypeMismtatchException
(
i
]
(), 
i
]
(), 
i
]);
					}
				}
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
 ::
(
const
 & 
, 
collections
::
<
>& 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
())
				{
					
if
(!
)
					{
						
throw
 (
L"thisObject"
, 
this
);
					}
				}
				
else
 if
(!
.
(
->
(), 
::
))
				{
					
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
->
(), 
::
, 
);
				}
				
(
);
				
return
 (
, 
);
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
 ::
(
const
 & 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
())
				{
					
if
(!
)
					{
						
throw
 (
L"thisObject"
, 
this
);
					}
				}
				
else
 if
(!
.
(
->
(), 
::
))
				{
					
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
->
(), 
::
, 
);
				}
				
return
 CreateFunctionProxyInternal
(
);
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
bool
 ::
(
<
> 
)
			{
				
for
(
 =
0
;
i
<
.
();
i
++)
				{
					
if
(
i
]
()
())
					{
						
return
 false
;
					}
				}
				
.
(
);
				
return
 true
;
			}
			
bool
 ::
(
* 
)
			{
				
if
(
) 
return
 false
;
				
=
;
				
return
 true
;
			}
			
::
(
* 
, 
const
 & 
)
				:ownerTypeDescriptor(
)
				,name(
)
			{
			}
			
::
()
			{
			}
			
* 
::
()
			{
				
return
 ;
			}
			
const
 & 
::
()
			{
				
return
 ;
			}
			
 ::
()
			{
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
if
(
0
<=
 && 
<
.
())
				{
					
return
 ].
();
				}
				
else
				{
					
return
 0
;
				}
			}
			
bool
 ::
(
<
> 
)
			{
				
.
(
);
				
return
 true
;
			}
			
::
(
* 
, 
const
 & 
)
				:ownerTypeDescriptor(
)
				,name(
)
			{
			}
			
::
()
			{
			}
			
* 
::
()
			{
				
return
 ;
			}
			
* 
::
()
			{
				
if
(!
)
				{
					
();
				}
				
return
 .
();
			}
			
 ::
GetObservingPropertyCount
()
			{
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
return
 ];
			}
			
const
 & 
::
()
			{
				
return
 ;
			}
			
<
> 
::
(
const
 & 
, 
<
> 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
())
				{
					
throw
 (
L"thisObject"
, 
this
);
				}
				
else
 if
(!
.
(
, 
::
))
				{
					
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
, 
::
, 
);
				}
				
* 
=
.
();
				
if
(
rawThisObject
)
				{
					
return
 (
rawThisObject
, 
);
				}
				
else
				{
					
return
 nullptr
;
				}
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
bool
 ::
(
const
 & 
, 
<
> 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
 (
.
())
				{
					
throw
 (
L"thisObject"
, 
this
);
				}
				
else
 if
 (!
.
(
, 
::
))
				{
					
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
, 
::
, 
);
				}
				
* 
 = 
.
();
				
if
 (
rawThisObject
)
				{
					
return
 (
rawThisObject
, 
);
				}
				
else
				{
					
return
 false
;
				}
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
void
 ::
(
const
 & 
, 
<
> 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
())
				{
					
throw
 (
L"thisObject"
, 
this
);
				}
				
else
 if
(!
.
(
, 
::
))
				{
					
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
, 
::
, 
);
				}
				
* 
=
.
();
				
if
(
rawThisObject
)
				{
					
(
rawThisObject
, 
);
				}
				
else
				{
					
return
;
				}
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
::
(
* 
, 
const
 & 
, 
* 
, 
* 
, 
* 
)
				:ownerTypeDescriptor(
)
				,name(
)
				,getter(
)
				,setter(
)
				,valueChangedEvent(
)
			{
				
if
(
) 
->
=
this
;
				
if
(
) 
->
=
this
;
				
if
(
)
				{
					
->
.
(
this
);
				}
			}
			
::
()
			{
			}
			
* 
::
()
			{
				
return
 ;
			}
			
const
 & 
::
()
			{
				
return
 ;
			}
			
::
* 
::
()
			{
				
return
 nullptr
;
			}
			
bool
 ::
()
			{
				
return
 !=
0
;
			}
			
bool
 ::
()
			{
				
return
 !=
0
;
			}
			
* 
::
()
			{
				
return
 ?
->
():
0
;
			}
			
* 
::
()
			{
				
return
 ;
			}
			
* 
::
()
			{
				
return
 ;
			}
			
* 
::
()
			{
				
return
 ;
			}
			
 ::
(
const
 & 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
)
				{
					
<
> 
;
					
return
 ->
(
, 
arguments
);
				}
				
else
				{
					
throw
 PropertyIsNotReadableException
(
this
);
				}
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
void
 ::
(
& 
, 
const
 & 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
)
				{
					
<
> 
(
1
);
					
arguments
0
]
;
					
->
(
, 
arguments
);
				}
				
else
				{
					
throw
 PropertyIsNotWritableException
(
this
);
				}
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
const
 & 
PropertyInfoImpl_StaticCpp
::
()
			{
				
return
 ;
			}
			
PropertyInfoImpl_StaticCpp
::
PropertyInfoImpl_StaticCpp
(
* 
, 
const
 & 
, 
* 
, 
* 
, 
* 
, 
const
 & 
)
				:
(
, 
, 
, 
, 
)
				, referenceTemplate(
)
			{
			}
			
PropertyInfoImpl_StaticCpp
::
~
PropertyInfoImpl_StaticCpp
()
			{
			}
			
::
* 
PropertyInfoImpl_StaticCpp
::
()
			{
				
return
 this
;
			}
			
::
(
* 
, 
const
 & 
, 
<
> 
)
				:ownerTypeDescriptor(
)
				,name(
)
				,returnInfo(
)
			{
			}
			
::
()
			{
			}
			
* 
::
()
			{
				
return
 ;
			}
			
const
 & 
::
()
			{
				
return
 ;
			}
			
bool
 ::
()
			{
				
return
 true
;
			}
			
bool
 ::
()
			{
				
return
 true
;
			}
			
* 
::
()
			{
				
return
 .
();
			}
			
* 
::
()
			{
				
return
 0
;
			}
			
* 
::
()
			{
				
return
 0
;
			}
			
* 
::
()
			{
				
return
 0
;
			}
			
 ::
(
const
 & 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
())
				{
					
throw
 (
L"thisObject"
, 
this
);
				}
				
else
				{
					
auto
  = 
.
();
					
auto
  = 
td
->
() ? 
::
 : 
::
;
					
if
(!
.
(
, 
valueType
))
					{
						
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
, 
valueType
, 
);
					}
				}
				
return
 (
);
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
void
 ::
(
& 
, 
const
 & 
)
			{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				if
(
.
())
				{
					
throw
 (
L"thisObject"
, 
this
);
				}
				
else
				{
					
auto
  = 
.
();
					
auto
  = 
td
->
() ? 
::
 : 
::
;
					
if
(!
.
(
, 
valueType
))
					{
						
throw
 ArgumentTypeMismtatchException
(
L"thisObject"
, 
, 
valueType
, 
);
					}
				}
				
if
(!
.
(
.
()))
				{
					
throw
 ArgumentTypeMismtatchException
(
L"newValue"
, 
.
(), 
);
				}
				
(
, 
);
#else
				CHECK_FAIL(L"Not Implemented under VCZH_DEBUG_METAONLY_REFLECTION!");
#endif
			}
			
* 
::
(
const
 & 
)
			{
				
 =
.
().
(
);
				
if
(
index
==-
1
)
				{
					
<
> 
=
new
 (
this
, 
);
					
.
(
, 
methodGroup
);
					
return
 methodGroup
.
();
				}
				
else
				{
					
return
 .
().
(
index
).
();
				}
			}
			
* 
::
()
			{
				
if
(!
)
				{
					
new
 (
this
, 
L""
);
				}
				
return
 .
();
			}
			
* 
::
(
<
> 
)
			{
				
.
(
(), 
);
				
return
 .
();
			}
			
* 
::
(
<
> 
)
			{
				
.
(
(), 
);
				
return
 .
();
			}
			
* 
::
(
const
 & 
, 
<
> 
)
			{
				
* 
=
(
);
				
(
methodGroup
);
				
methodGroup
->
(
);
				
return
 .
();
			}
			
* 
::
(
<
> 
)
			{
				
* 
=
();
				
(
methodGroup
);
				
methodGroup
->
(
);
				
return
 .
();
			}
			
void
 ::
(
* 
)
			{
				
.
(
);
			}
			
void
 ::
()
			{
				
if
(!
)
				{
					
=
true
;
					
();
				}
			}
			
::
(
 , 
const
 * 
)
				:
(
, 
)
				,loaded(
false
)
			{
			}
			
::
()
			{
			}
			
bool
 ::
()
			{
				
return
 false
;
			}
			
* 
::
()
			{
				
return
 nullptr
;
			}
			
* 
::
()
			{
				
return
 nullptr
;
			}
			
* 
::
()
			{
				
return
 nullptr
;
			}
			
 ::
GetBaseTypeDescriptorCount
()
			{
				
();
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
();
				
if
(
0
<=
 && 
<
.
())
				{
					
return
 ];
				}
				
else
				{
					
return
 0
;
				}
			}
			
bool
 ::
(
* 
)
			{
				
();
				
if
 (
this
 == 
) 
return
 true
;
				
for
 (
  = 
0
; 
i
 < 
.
(); 
i
++)
				{
					
if
 (
i
]->
(
)) 
return
 true
;
				}
				
return
 false
;
			}
			
 ::
()
			{
				
();
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
();
				
if
(
0
<=
 && 
<
.
())
				{
					
return
 .
().
(
).
();
				}
				
else
				{
					
return
 0
;
				}
			}
			
bool
 ::
(
const
 & 
, 
bool
 )
			{
				
();
				
if
(
.
().
(
))
				{
					
return
 true
;
				}
				
if
(
)
				{
					
for
(
 =
0
;
i
<
.
();
i
++)
					{
						
if
(
i
]->
(
, 
true
))
						{
							
return
 true
;
						}
					}
				}
				
return
 false
;
			}
			
* 
::
(
const
 & 
, 
bool
 )
			{
				
();
				
 =
.
().
(
);
				
if
(
index
!=-
1
)
				{
					
return
 .
().
(
index
).
();
				}
				
if
(
)
				{
					
for
(
 =
0
;
i
<
.
();
i
++)
					{
						
* 
=
i
]->
(
, 
true
);
						
if
(
result
)
						{
							
return
 result
;
						}
					}
				}
				
return
 0
;
			}
			
 ::
()
			{
				
();
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
();
				
if
(
0
<=
 && 
<
.
())
				{
					
return
 .
().
(
).
();
				}
				
else
				{
					
return
 0
;
				}
			}
			
bool
 ::
(
const
 & 
, 
bool
 )
			{
				
();
				
if
(
.
().
(
))
				{
					
return
 true
;
				}
				
if
(
)
				{
					
for
(
 =
0
;
i
<
.
();
i
++)
					{
						
if
(
i
]->
(
, 
true
))
						{
							
return
 true
;
						}
					}
				}
				
return
 false
;
			}
			
* 
::
(
const
 & 
, 
bool
 )
			{
				
();
				
 =
.
().
(
);
				
if
(
index
!=-
1
)
				{
					
return
 .
().
(
index
).
();
				}
				
if
(
)
				{
					
for
(
 =
0
;
i
<
.
();
i
++)
					{
						
* 
=
i
]->
(
, 
true
);
						
if
(
result
)
						{
							
return
 result
;
						}
					}
				}
				
return
 0
;
			}
			
 ::
()
			{
				
();
				
return
 .
();
			}
			
* 
::
(
 )
			{
				
();
				
if
(
0
<=
 && 
<
.
())
				{
					
return
 .
().
(
).
();
				}
				
else
				{
					
return
 0
;
				}
			}
			
bool
 ::
(
const
 & 
, 
bool
 )
			{
				
();
				
if
(
.
().
(
))
				{
					
return
 true
;
				}
				
if
(
)
				{
					
for
(
 =
0
;
i
<
.
();
i
++)
					{
						
if
(
i
]->
(
, 
true
))
						{
							
return
 true
;
						}
					}
				}
				
return
 false
;
			}
			
* 
::
(
const
 & 
, 
bool
 )
			{
				
();
				
 =
.
().
(
);
				
if
(
index
!=-
1
)
				{
					
return
 .
().
(
index
).
();
				}
				
if
(
)
				{
					
for
(
 =
0
;
i
<
.
();
i
++)
					{
						
* 
=
i
]->
(
, 
true
);
						
if
(
result
)
						{
							
return
 result
;
						}
					}
				}
				
return
 0
;
			}
			
* 
::
()
			{
				
();
				
return
 .
();
			}
#endif
			namespace
 
			{
				
void
 (
<
> 
, 
 )
				{
				}
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
				void
 (
* 
, 
collections
::
<
>& 
, 
 )
				{
				}
#endif
				void
 (
<
> 
)
				{
				}
			}
		}
	}
}