#include "GuiInstanceLoader.h"
#include "InstanceQuery/GuiInstanceQuery.h"
#include "GuiInstanceSharedScript.h"
#include "WorkflowCodegen/GuiInstanceLoader_WorkflowCodegen.h"
#include "../Reflection/TypeDescriptors/GuiReflectionPlugin.h"
#include "../Reflection/GuiInstanceCompiledWorkflow.h"
#include "../Resources/GuiParserManager.h"
namespace
{
namespace
{
using
namespace
collections
;
using
namespace
parsing
;
using
namespace
parsing
::
xml
;
using
namespace
parsing
::
tabling
;
using
namespace
controls
;
using
namespace
regex
;
using
namespace
reflection
::
description
;
using
namespace
stream
;
using
namespace
workflow
;
using
namespace
workflow
::
analyzer
;
using
namespace
workflow
::
typeimpl
;
<
>
::
()
{
return
new
;
}
<
>
::
(
<
description
::
>
)
{
auto
=
<
>();
info
=
;
if
(
)
info
.
(
);
return
info
;
}
<
>
::
(
<
description
::
>
)
{
auto
=
(
);
info
=
;
return
info
;
}
<
>
::
(
<
description
::
>
)
{
auto
=
(
);
info
=
;
return
info
;
}
<
>
::
(
<
description
::
>
)
{
auto
=
(
);
info
=
;
return
info
;
}
<
>
::
(
<
description
::
>
)
{
auto
=
<
>();
info
=
;
if
(
)
info
.
(
);
return
info
;
}
<
>
::
(
<
description
::
>
)
{
auto
=
<
>();
info
=
;
if
(
)
info
.
(
);
return
info
;
}
void
::
()
{
}
void
::
(
const
&
,
collections
::
<
>&
)
{
}
void
::
(
const
&
,
collections
::
<
>&
)
{
}
void
::
(
const
&
,
collections
::
<
>&
)
{
}
<
>
::
(
const
&
)
{
return
nullptr
;
}
bool
::
(
const
&
)
{
return
false
;
}
<
workflow
::
>
::
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
&
,
::
&
)
{
CHECK_FAIL(L"IGuiInstanceLoader::CreateRootInstance(GuiResourcePrecompileContext&, types::ResolvingResult&, const TypeInfo&, Ptr<workflow::WfExpression>, ArgumentMap&, GuiResourceError::List&)#This function is not implemented.");
do
{
throw
(
L"IGuiInstanceLoader::CreateRootInstance(GuiResourcePrecompileContext&, types::ResolvingResult&, const TypeInfo&, Ptr<workflow::WfExpression>, ArgumentMap&, GuiResourceError::List&)#This function is not implemented."
);}
while
(
0
);
}
<
workflow
::
>
::
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
&
,
::
&
)
{
return
nullptr
;
}
<
workflow
::
>
::
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
&
,
,
::
&
)
{
CHECK_FAIL(L"IGuiInstanceLoader::CreateInstance(GuiResourcePrecompileContext&, types::ResolvingResult&, const TypeInfo&, GlobalStringKey, ArgumentMap&, GuiResourceTextPos, GuiResourceError::List&)#This function is not implemented.");
do
{
throw
(
L"IGuiInstanceLoader::CreateInstance(GuiResourcePrecompileContext&, types::ResolvingResult&, const TypeInfo&, GlobalStringKey, ArgumentMap&, GuiResourceTextPos, GuiResourceError::List&)#This function is not implemented."
);}
while
(
0
);
}
<
workflow
::
>
::
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
&
,
,
::
&
)
{
CHECK_FAIL(L"IGuiInstanceLoader::AssignParameters(GuiResourcePrecompileContext&, types::ResolvingResult&, const TypeInfo&, GlobalStringKey, ArgumentMap&, GuiResourceTextPos, GuiResourceError::List&)#This function is not implemented.");
do
{
throw
(
L"IGuiInstanceLoader::AssignParameters(GuiResourcePrecompileContext&, types::ResolvingResult&, const TypeInfo&, GlobalStringKey, ArgumentMap&, GuiResourceTextPos, GuiResourceError::List&)#This function is not implemented."
);}
while
(
0
);
}
<
workflow
::
>
::
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
,
::
&
)
{
CHECK_FAIL(L"IGuiInstanceLoader::GetParameter(GuiResourcePrecompileContext&, types::ResolvingResult&, const PropertyInfo&, GlobalStringKey, GuiResourceTextPos, GuiResourceError::List&)#This function is not implemented.");
do
{
throw
(
L"IGuiInstanceLoader::GetParameter(GuiResourcePrecompileContext&, types::ResolvingResult&, const PropertyInfo&, GlobalStringKey, GuiResourceTextPos, GuiResourceError::List&)#This function is not implemented."
);}
while
(
0
);
}
class
GuiInstanceContextElementNameParser
:
public
,
public
<
::
>
{
typedef
::
;
public
:
;
GuiInstanceContextElementNameParser
()
:regexElementName(
L"((<namespaceName>[a-zA-Z_]/w*):)?((<category>[a-zA-Z_]/w*).)?(<name>[a-zA-Z_]/w*)(-(<binding>[a-zA-Z_]/w*))?"
)
{
}
<
>
(
const
&
,
collections
::
<
<
parsing
::
>>&
)
override
{
<
>
=
.
(
);
if
(!
match
||
match
().
() !=
.
())
{
.
(
<
>(
L"Failed to parse an element name \""
+
+
L"\"."
));
return
nullptr
;
}
<
>
=
new
;
if
(
match
().
().
(
L"namespaceName"
))
{
elementName
=
match
()[
L"namespaceName"
][
0
].
();
}
if
(
match
().
().
(
L"category"
))
{
elementName
=
match
()[
L"category"
][
0
].
();
}
if
(
match
().
().
(
L"name"
))
{
elementName
=
match
()[
L"name"
][
0
].
();
}
if
(
match
().
().
(
L"binding"
))
{
elementName
=
match
()[
L"binding"
][
0
].
();
}
return
elementName
;
}
};
#define CTOR_PARAM_PREFIX\
static const wchar_t Prefix[] = L"<ctor-parameter>";\
static const vint PrefixLength = (vint)sizeof(Prefix) / sizeof(*Prefix) - 1;\
#define CTOR_PARAM_NAME(NAME) (NAME).Right((NAME).Length() - PrefixLength)
class
:
public
,
public
{
protected
:
typedef
<
*,
>
;
typedef
<
<
>,
*>
;
<
,
>
;
<
*,
*>
;
<
*,
*>
;
public
:
*
(
*
)
{
*
=
nullptr
;
=
.
().
(
);
if
(
index
== -
1
)
{
if
(
auto
=
->
())
{
=
ctors
->
();
for
(
=
0
;
i
<
count
;
i
++)
{
*
=
ctors
->
(
i
);
if
(
method
->
() ==
0
)
{
ctor
=
method
;
break
;
}
}
}
.
(
,
ctor
);
}
else
{
ctor
=
.
()
index
];
}
return
ctor
;
}
*
(
*
)
{
CTOR_PARAM_PREFIX
static
const
wchar_t
[] =
L"<ctor-parameter>"
;
static
const
= (
)
sizeof
(
Prefix
) /
sizeof
(*
Prefix
) -
1
;
*
=
nullptr
;
=
.
().
(
);
if
(
index
== -
1
)
{
if
(
dynamic_cast
<
*>(
))
{
if
(
auto
=
->
())
{
if
(
group
->
() ==
1
)
{
auto
=
group
->
(
0
);
=
method
->
();
for
(
=
0
;
i
<
count
;
i
++)
{
const
auto
&
=
method
->
(
i
)->
();
if
(
name
.
() <=
PrefixLength
||
name
.
(
PrefixLength
) !=
Prefix
)
{
goto
FINISHED;
}
if (!typeDescriptor->GetPropertyByName(CTOR_PARAM_NAME(name), false))
if
(!
->
((
name
).
((
name
).
() -
PrefixLength
),
false
))
{
goto
FINISHED;
}
}
ctor
=
method
;
}
}
}
FINISHED:
.
(
,
ctor
);
}
else
{
ctor
=
.
()
index
];
}
return
ctor
;
}
()
override
{
return
::
;
}
void
()
override
{
.
();
.
();
.
();
}
*
(
*
,
bool
&
,
bool
&
,
bool
&
)
{
=
false
;
=
false
;
=
false
;
if
(
->
() ==
::
&&
->
()->
() ==
::
)
{
auto
=
->
();
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
=
true
;
=
true
;
return
genericType
->
(
0
);
}
else
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
=
true
;
=
true
;
return
genericType
->
(
0
);
}
else
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
return
genericType
->
(
0
);
}
else
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
=
true
;
return
genericType
->
(
0
);
}
else
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
=
true
;
return
genericType
->
(
0
);
}
else
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
return
nullptr
;
}
else
if
(
genericType
->
() ==
description
::
<
>())
{
=
true
;
return
nullptr
;
}
}
return
;
}
*
GetPropertyReflectionTypeInfo
(
const
&
,
::
&
)
{
=
::
;
*
=
.
.
()->
(
.
.
(),
true
);
if
(
prop
)
{
*
=
prop
->
();
bool
=
false
;
bool
=
false
;
bool
=
false
;
auto
=
(
propType
,
readableList
,
writableList
,
collectionType
);
if
(
prop
->
())
{
if
(
collectionType
)
{
if
(
readableList
)
{
=
::
;
return
propValueType
;
}
}
else
{
=
::
;
return
propValueType
;
}
}
else
if
(
prop
->
())
{
if
(
collectionType
)
{
if
(
writableList
)
{
=
::
;
return
propValueType
;
}
}
else
{
if
(
propType
->
() ==
::
||
propType
->
() ==
::
)
{
if
(
propType
->
()->
() !=
::
)
{
=
::
;
return
propValueType
;
}
}
}
}
}
return
nullptr
;
}
void
(
const
&
,
*
,
collections
::
<
>&
)
{
=
->
();
for
(
=
0
;
i
<
propertyCount
;
i
++)
{
=
::
(
->
(
i
)->
());
if
(!
.
(
propertyName
))
{
auto
=
(
(
,
propertyName
));
if
(
info
&&
info
!=
::
)
{
.
(
propertyName
);
}
}
}
=
->
GetBaseTypeDescriptorCount
();
for
(
=
0
;
i
<
parentCount
;
i
++)
{
(
,
->
(
i
),
);
}
}
void
(
const
&
,
collections
::
<
>&
)
override
{
if
(
(
))
{
CTOR_PARAM_PREFIX
static
const
wchar_t
[] =
L"<ctor-parameter>"
;
static
const
= (
)
sizeof
(
Prefix
) /
sizeof
(*
Prefix
) -
1
;
if
(
auto
=
(
.
()))
{
=
ctor
->
();
for
(
=
0
;
i
<
count
;
i
++)
{
const
auto
&
=
ctor
->
(
i
)->
();
propertyNames.Add(GlobalStringKey::Get(CTOR_PARAM_NAME(name)));
.
(
::
((
name
).
((
name
).
() -
PrefixLength
)));
}
}
}
}
void
(
const
&
,
collections
::
<
>&
)
override
{
(
,
);
(
,
.
(),
);
}
(
const
&
)
{
CTOR_PARAM_PREFIX
static
const
wchar_t
[] =
L"<ctor-parameter>"
;
static
const
= (
)
sizeof
(
Prefix
) /
sizeof
(*
Prefix
) -
1
;
(
.
.
(),
.
);
=
.
().
(
key
);
if
(
index
== -
1
)
{
::
=
::
;
if
(
*
=
GetPropertyReflectionTypeInfo
(
,
support
))
{
<
>
=
new
;
result
=
support
;
result
.
(
(
propType
));
if
(
auto
=
(
.
.
()))
{
=
ctor
->
();
for
(
=
0
;
i
<
count
;
i
++)
{
const
auto
&
=
ctor
->
(
i
)->
();
if (CTOR_PARAM_NAME(name) == propertyInfo.propertyName.ToString())
if
((
name
).
((
name
).
() -
PrefixLength
) ==
.
.
())
{
result
=
::
;
result
=
::
;
}
}
}
*
=
.
.
()->
(
.
.
(),
true
);
(
result
,
prop
);
.
(
key
,
value
);
return
value
;
}
else
{
(
::
(),
0
);
.
(
key
,
value
);
return
value
;
}
}
else
{
return
.
()
index
];
}
}
<
>
(
const
&
)
override
{
return
(
).f0;
}
bool
(
const
&
)
override
{
return
(
.
()) !=
nullptr
||
(
.
()) !=
nullptr
;
}
<
workflow
::
>
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
&
,
::
&
)
override
{
CTOR_PARAM_PREFIX
static
const
wchar_t
[] =
L"<ctor-parameter>"
;
static
const
= (
)
sizeof
(
Prefix
) /
sizeof
(*
Prefix
) -
1
;
if
(
.
() >
0
)
{
auto
=
<
>();
auto
=
.
()->
(
0
);
auto
=
<
>(
baseTd
,
::
);
call
(
baseTypeInfo
.
());
auto
=
baseTd
->
()->
(
0
);
=
ctor
->
();
for
(
=
0
;
i
<
count
;
i
++)
{
auto key = GlobalStringKey::Get(CTOR_PARAM_NAME(ctor->GetParameter(0)->GetName()));
auto
=
::
((
ctor
->
(
0
)->
()).
((
ctor
->
(
0
)->
()).
() -
PrefixLength
));
=
.
().
(
key
);
if
(
index
== -
1
)
{
return
nullptr
;
}
else
{
call
.
(
.
(
index
)
0
].
);
}
}
return
call
;
}
return
nullptr
;
}
<
workflow
::
>
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
&
,
,
::
&
)
override
{
CTOR_PARAM_PREFIX
static
const
wchar_t
[] =
L"<ctor-parameter>"
;
static
const
= (
)
sizeof
(
Prefix
) /
sizeof
(*
Prefix
) -
1
;
auto
=
(
.
());
auto
=
(
.
());
auto
=
<
>();
if
(
defaultCtor
)
{
create
(
defaultCtor
->
());
}
else
{
create
(
instanceCtor
->
());
=
instanceCtor
->
();
for
(
=
0
;
i
<
count
;
i
++)
{
const
auto
&
=
instanceCtor
->
(
i
)->
();
auto key = GlobalStringKey::Get(CTOR_PARAM_NAME(name));
auto
=
::
((
name
).
((
name
).
() -
PrefixLength
));
=
.
().
(
key
);
if
(
index
== -
1
)
{
return
nullptr
;
}
else
{
create
.
(
.
(
index
)
0
].
);
}
}
}
auto
=
<
>();
refValue
.
.
();
auto
=
<
>();
assign
=
::
;
assign
refValue
;
assign
create
;
auto
=
<
>();
stat
assign
;
return
stat
;
}
<
workflow
::
>
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
&
,
,
::
&
)
override
{
auto
=
<
>();
FOREACH_INDEXER(GlobalStringKey, prop, index, arguments.Keys())
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__
.
(
prop
);
index
++)
{
=
(
(
,
prop
));
if
(
propertyType
.f1)
{
switch
(
propertyType
.f0->support)
{
case
::
:
{
const
auto
&
=
.
(
index
);
if
(
values
.
() >
0
)
{
{
auto
=
<
>();
refValue
.
.
();
auto
=
<
>();
refProp
refValue
;
refProp
.
prop
.
();
auto
=
<
>();
varDesc
.
=
L"<collection>"
;
varDesc
refProp
;
auto
=
<
>();
stat
varDesc
;
block
.
(
stat
);
}
for
(
=
0
;
i
<
values
.
();
i
++)
{
auto
=
<
>();
refCollection
.
=
L"<collection>"
;
auto
=
<
>();
refAdd
refCollection
;
refAdd
.
=
L"Add"
;
auto
=
<
>();
call
refAdd
;
call
.
(
values
i
].
);
auto
=
<
>();
stat
call
;
block
.
(
stat
);
}
}
}
break
;
case
::
:
{
auto
=
<
>();
FOREACH(ArgumentInfo, item, arguments.GetByIndex(index))
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
>&
= ::
vl
::
collections
::
(
.
(
index
));
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
;
__foreach_iterator__
.
(
item
);)
{
auto
=
<
>();
argument
item
.
;
refArray
.
(
argument
);
}
auto
=
<
>();
refValue
.
.
();
auto
=
<
>();
refProp
refValue
;
refProp
.
prop
.
();
auto
=
<
>();
assign
=
::
;
assign
refProp
;
assign
refArray
;
auto
=
<
>();
stat
assign
;
block
.
(
stat
);
}
break
;
case
::
:
{
auto
&
=
.
(
index
)
0
];
if
(
propertyValue
.
)
{
auto
=
<
>();
refValue
.
.
();
auto
=
<
>();
refProp
refValue
;
refProp
.
prop
.
();
auto
=
<
>();
assign
=
::
;
assign
refProp
;
assign
propertyValue
.
;
auto
=
<
>();
stat
assign
;
block
.
(
stat
);
}
}
break
;
default
:
.
(
({
.
},
,
L"Precompile: Property \""
+
prop
.
() +
L"\" of type \""
+
.
.
() +
L"\" is not assignable."
));
}
}
}
if
(
block
.
() >
0
)
{
return
block
;
}
return
nullptr
;
}
<
workflow
::
>
(
GuiResourcePrecompileContext
&
,
types
::
&
,
const
&
,
,
,
::
&
)
override
{
auto
=
<
>();
refValue
.
.
();
auto
=
<
>();
refProp
refValue
;
refProp
.
.
.
();
return
refProp
;
}
};
#undef CTOR_PARAM_NAME
#undef CTOR_PARAM_PREFIX
IGuiInstanceLoaderManager
*
=
0
;
IGuiInstanceLoaderManager
*
()
{
return
instanceLoaderManager
;
}
class
:
public
,
public
IGuiInstanceLoaderManager
,
public
{
protected
:
typedef
<
,
<
>>
;
typedef
<
,
<
>>
;
typedef
<
<
>>
;
struct
{
;
*
=
nullptr
;
;
<
>
;
<
*>
;
<
*>
;
};
typedef
<
,
<
>>
;
<
>
;
;
;
;
;
bool
(
)
{
return
()->
(
.
()) !=
0
||
.
().
(
);
}
void
(
<
>
,
*
)
{
if
(
!=
)
{
=
.
().
(
::
(
->
()));
if
(
index
== -
1
)
{
.
(
);
}
else
{
.
(
.
()
index
].
());
return
;
}
}
=
->
GetBaseTypeDescriptorCount
();
for
(
=
0
;
i
<
count
;
i
++)
{
*
=
->
(
i
);
(
,
baseType
);
}
}
void
(
<
>
)
{
if
(
!=
::
)
{
=
nullptr
;
}
.
();
.
();
*
=
;
if
(!
searchType
)
{
=
.
().
(
);
if
(
index
== -
1
)
{
searchType
=
()->
(
.
());
=
searchType
;
.
(
searchType
);
}
else
{
*
=
.
()
index
].
();
=
parentTypeInfo
->
;
.
(
parentTypeInfo
);
return
;
}
}
if
(
searchType
)
{
(
,
searchType
);
}
}
*
(
*
)
{
=
.
().
(
::
(
->
()));
if
(
index
== -
1
)
{
=
->
GetBaseTypeDescriptorCount
();
for
(
=
0
;
i
<
count
;
i
++)
{
*
=
->
(
i
);
*
=
(
baseType
);
if
(
loader
)
return
loader
;
}
return
0
;
}
else
{
return
.
()
index
]
.
();
}
}
public
:
()
{
new
;
}
GUI_PLUGIN_NAME(GacUI_Instance)
vl
::
()
override
{
return
L"GacUI_Instance"
; }
void
(
vl
::
collections
::
<
>&
)
override
{
GUI_PLUGIN_DEPEND(GacUI_Parser);
}
void
()
override
{
instanceLoaderManager
=
this
;
*
=
();
manager
->
(
L"INSTANCE-ELEMENT-NAME"
,
new
GuiInstanceContextElementNameParser
);
}
void
()
override
{
instanceLoaderManager
=
nullptr
;
}
bool
(
<
>
)
override
{
if
(
.
().
(
()))
return
false
;
.
(
(),
);
return
true
;
}
*
(
)
override
{
=
.
().
(
);
return
index
== -
1
?
nullptr
:
.
()
index
].
();
}
bool
(
<
>
)
override
{
if
(
.
().
(
()))
return
false
;
.
(
(),
);
return
true
;
}
*
(
)
override
{
=
.
().
(
);
return
index
== -
1
?
nullptr
:
.
()
index
].
();
}
bool
(
<
>
)
override
{
if
(
.
(
.
()))
return
false
;
.
(
);
return
true
;
}
*
(
const
::
&
,
description
::
*
)
override
{
FOREACH(Ptr<IGuiInstanceDeserializer>, deserializer, deserializers)
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
);
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
deserializer
);)
{
if
(
deserializer
(
,
))
{
return
deserializer
.
();
}
}
return
nullptr
;
}
bool
(
,
<
>
)
override
{
if
(
(
()) || !
(
))
return
false
;
<
>
=
new
;
typeInfo
();
typeInfo
;
typeInfo
;
.
(
(),
typeInfo
);
(
typeInfo
);
return
true
;
}
bool
(
<
>
)
override
{
=
.
().
(
());
if
(
index
!= -
1
)
return
false
;
*
=
()->
(
().
());
if
(
typeDescriptor
==
0
)
return
false
;
<
>
=
new
;
typeInfo
();
typeInfo
=
typeDescriptor
;
typeInfo
;
.
(
typeInfo
,
typeInfo
);
(
typeInfo
);
FOREACH(Ptr<VirtualTypeInfo>, derived, typeInfos.Values())
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
.
());
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
derived
);)
{
if
(
derived
.
(
typeInfo
))
{
(
derived
);
}
}
return
true
;
}
*
(
)
override
{
=
.
().
(
);
if
(
index
!= -
1
)
{
return
.
()
index
]
.
();
}
*
=
()->
(
.
());
if
(
typeDescriptor
)
{
*
=
(
typeDescriptor
);
return
loader
?
loader
:
.
();
}
return
0
;
}
*
(
*
)
override
{
=
.
().
(
->
());
if
(
index
!= -
1
)
{
<
>
=
.
()
index
];
if
(
typeInfo
.
() >
0
)
{
return
typeInfo
0
]->
.
();
}
return
.
();
}
return
0
;
}
<
description
::
>
(
)
override
{
=
.
().
(
);
auto
=
index
== -
1
?
()->
(
.
())
:
.
()
index
]
;
if
(!
td
)
return
nullptr
;
if
(
auto
=
td
->
())
{
return
(
ctor
->
(
0
)->
());
}
else
{
return
<
>(
<
>(
td
,
::
));
}
}
void
(
collections
::
<
>&
)
override
{
for
(
=
0
;
i
<
.
();
i
++)
{
if
(
.
()
i
]
!=
::
)
{
.
(
.
()
i
]);
}
}
}
GetParentTypeForVirtualType
(
)
override
{
=
.
().
(
);
if
(
index
!= -
1
)
{
auto
=
.
()
index
];
return
typeInfo
;
}
return
::
;
}
void
()
override
{
();
FOREACH(Ptr<VirtualTypeInfo>, info, typeInfos.Values())
if
(
bool
=
true
)
for
(
const
::
vl
::
collections
::
<
<
>>&
= ::
vl
::
collections
::
(
.
());
__scope_variable_flag__
;
__scope_variable_flag__
=
false
)
for
(
<
>
;
__foreach_iterator__
.
(
info
);)
{
info
();
}
}
};
GUI_REGISTER_PLUGIN(GuiInstanceLoaderManager)
class
GuiRegisterPluginClass_GuiInstanceLoaderManager
{
public
:
GuiRegisterPluginClass_GuiInstanceLoaderManager
() {
vl
::
presentation
::
controls
::
()->
(
new
); } }
instance_GuiRegisterPluginClass_GuiInstanceLoaderManager
;
void
(
const
&
,
const
&
,
collections
::
<
>&
)
{
const
wchar_t
*
=
.
();
while
(*
attValue
)
{
const
wchar_t
*
=
(
attValue
,
.
());
;
if
(
attSemicolon
)
{
pattern
(
attValue
,
(
attSemicolon
-
attValue
));
attValue
=
attSemicolon
+
.
();
}
else
{
=
(
attValue
);
pattern
(
attValue
,
len
);
attValue
+=
len
;
}
.
(
pattern
);
}
}
void
(
const
&
,
collections
::
<
>&
)
{
(
,
L"::"
,
);
}
void
(
const
&
,
collections
::
<
>&
)
{
(
,
L";"
,
);
}
}
}