Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum string СгенерироватьКод(alias Тип, bool КодСервера)() {
- enum ulong ПолучитьИндекс(ulong ИндексИнтерфейса0 ,ulong ИндексМетода0, ulong ИндексФункции0) {
- ulong Индекс;
- static if(КодСервера) alias Интерфейс = InterfacesTuple!Тип[0];
- else alias Интерфейс = Тип;
- enum ulong ИндексИнтерфейса = 0;
- //alias Интерфейсы = InterfacesTuple!Тип;
- //foreach(ИндексИнтерфейса, Интерфейс; Интерфейсы) {
- foreach(ИндексМетода, ИмяМетода; __traits(derivedMembers, Интерфейс)) {
- alias Функции = __traits(getVirtualMethods, Интерфейс, ИмяМетода);
- alias ТипыФункций = typeof(Функции);
- foreach(ИндексФункции, ТипФункции; ТипыФункций) {
- if(ИндексИнтерфейса==ИндексИнтерфейса0 && ИндексМетода==ИндексМетода0 && ИндексФункции==ИндексФункции0) return Индекс;
- Индекс++;
- }
- }
- //}
- return Индекс;
- }
- static if(КодСервера) alias Интерфейс = InterfacesTuple!Тип[0];
- else alias Интерфейс = Тип;
- enum ulong ИндексИнтерфейса = 0;
- string Код;
- //alias Интерфейсы = InterfacesTuple!Тип;
- //foreach(ИндексИнтерфейса, Интерфейс; Интерфейсы) {
- foreach(ИндексМетода, ИмяМетода; __traits(derivedMembers, Интерфейс)) {
- alias Функции = __traits(getVirtualMethods, Интерфейс, ИмяМетода);
- alias ТипыФункций = typeof(Функции);
- foreach(ИндексФункции, ТипФункции; ТипыФункций) {
- static if(КодСервера) enum string КодИнтерфейса = "InterfacesTuple!Тип[%s]".format(ИндексИнтерфейса);
- else enum string КодИнтерфейса = "Интерфейс";
- enum string КодИмениМетода = "__traits(derivedMembers, %s)[%s]".format(КодИнтерфейса, ИндексМетода);
- enum string КодПараметровФункции = "typeof(__traits(getVirtualMethods, %s, %s)[%s])".format(КодИнтерфейса, КодИмениМетода, ИндексФункции);
- enum string КодВыходногоТипа = "ReturnType!(%s)".format(КодПараметровФункции);
- enum string КодКортежаВходныхТипов = "Parameters!(%s)".format(КодПараметровФункции);
- enum auto МассивВходныхИмён = [ParameterIdentifierTuple!(Функции[ИндексФункции])];
- alias ВыходнойТип = ReturnType!ТипФункции;
- enum bool ВозвращаетДанные = !is(ВыходнойТип==void);
- static if(КодСервера)
- enum string КодФункции = СгенерироватьУчастокКодаСервера(ПолучитьИндекс(ИндексИнтерфейса,ИндексМетода,ИндексФункции), ВозвращаетДанные, КодВыходногоТипа, ИмяМетода, КодКортежаВходныхТипов, МассивВходныхИмён);
- else
- enum string КодФункции = СгенерироватьКодФункцииКлиента(ПолучитьИндекс(ИндексИнтерфейса,ИндексМетода,ИндексФункции), ВозвращаетДанные, КодВыходногоТипа, ИмяМетода, КодКортежаВходныхТипов, МассивВходныхИмён);
- Код ~= КодФункции ~ "\n\n";
- }
- }
- //}
- return Код;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement