#ifndef VCZH_PRESENTATION_RESOURCES_GUIPARSERMANAGER
#define VCZH_PRESENTATION_RESOURCES_GUIPARSERMANAGER
#include "GuiResource.h"
namespace
{
namespace
{
class
:
public
,
public
<
>
{
public
:
};
template
<
typename
>
class
:
public
{
using
=
collections
::
<
<
parsing
::
>>;
public
:
virtual
<
>
(
const
&
,
&
) =
0
;
<
>
(
,
const
&
,
collections
::
<
>&
)
{
;
auto
=
(
,
parsingErrors
);
::
(
,
,
parsingErrors
);
return
result
;
}
<
>
(
,
const
&
,
parsing
::
,
collections
::
<
>&
)
{
;
auto
=
(
,
parsingErrors
);
::
(
,
,
parsingErrors
,
);
return
result
;
}
<
>
(
,
const
&
,
,
collections
::
<
>&
)
{
;
auto
=
(
,
parsingErrors
);
::
(
,
,
parsingErrors
,
);
return
result
;
}
};
class
:
public
,
public
<
>
{
protected
:
typedef
parsing
::
tabling
::
;
public
:
virtual
<
>
(
const
&
)=
0
;
virtual
bool
(
const
&
,
<
<
>()>
)=
0
;
virtual
<
>
(
const
&
)=
0
;
virtual
bool
(
const
&
,
<
>
)=
0
;
template
<
typename
>
<
<
>>
(
const
&
);
template
<
typename
>
bool
(
const
&
,
const
&
,
<
>(*
)(
const
&,
<
>,
collections
::
<
<
parsing
::
>>&,
));
};
extern
*
();
template
<
typename
>
class
GuiStrongTypedTableParser
:
public
,
public
<
>
{
protected
:
typedef
parsing
::
tabling
::
;
typedef
<
>(
)(
const
&,
<
>,
collections
::
<
<
parsing
::
>>&,
);
protected
:
;
<
>
;
<
>
;
public
:
GuiStrongTypedTableParser
(
const
&
,
*
)
:name(
)
,function(
)
{
}
<
>
(
const
&
,
collections
::
<
<
parsing
::
>>&
)
override
{
if
(!
)
{
()->
(
);
}
if
(
)
{
collections
::
<
<
parsing
::
>>
;
auto
=
,
,
parsingErrors
, -
1
);
if
(
parsingErrors
.
() >
0
)
{
.
(
parsingErrors
0
]);
}
return
result
;
}
return
nullptr
;
}
};
template
<
typename
>
<
<
>>
::
(
const
&
)
{
return
(
).
<
<
>>();
}
template
<
typename
>
bool
::
(
const
&
,
const
&
,
<
>(*
)(
const
&,
<
>,
collections
::
<
<
parsing
::
>>&,
))
{
<
<
>>
=
new
GuiStrongTypedTableParser
<
>(
,
);
return
(
,
parser
);
}
}
}
#endif