From 1bc0a11aebf4aa0a5937ea55eda4340f85088b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Thu, 8 Jun 2023 20:00:04 +0300 Subject: [PATCH] d --- iOS/app/MMMemory.xcodeproj/project.pbxproj | 24 +++++-------- .../UserInterfaceState.xcuserstate | Bin 32292 -> 30794 bytes iOS/app/project.yml | 2 +- shared/gen | 2 +- shared/swift.swift | 32 ++++++++++++++++++ toSwift | 23 +++++++++++-- будущее | 27 ++++----------- прошлое | 18 ++++++++++ 8 files changed, 86 insertions(+), 42 deletions(-) create mode 100644 shared/swift.swift diff --git a/iOS/app/MMMemory.xcodeproj/project.pbxproj b/iOS/app/MMMemory.xcodeproj/project.pbxproj index 1ac7e20..a1fce3b 100644 --- a/iOS/app/MMMemory.xcodeproj/project.pbxproj +++ b/iOS/app/MMMemory.xcodeproj/project.pbxproj @@ -8,13 +8,11 @@ /* Begin PBXBuildFile section */ 1F083A14C69F20A6BA92A63E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F16A7DD61EF6CD4FB4E3DE25 /* AppDelegate.swift */; }; - 248FA3B7A82DA60E6892F821 /* memorySpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490862345F009401FB4E1199 /* memorySpace.swift */; }; 3D03666F3BC2B1F2CBB49530 /* Main.SectionSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5F2B2E3A26F03F6825608E /* Main.SectionSelection.swift */; }; - 3EA747EF132EF00B60CE3BA8 /* memorySide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17E6ABD013AB08F7DF11C069 /* memorySide.swift */; }; 79FB208C9DADDA6179E588C3 /* Main.SectionGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC22F19366076CF4168BFBD /* Main.SectionGrid.swift */; }; - 7B6D5211C387213AE05C080F /* memoryGap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9994AEAC20F4AB2DA70C9840 /* memoryGap.swift */; }; 89086E3972F560A9A1A76CE4 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C71EDBDFFDBC96F6E8E7762 /* Model.swift */; }; B19B3998FA2BA651ACB1E53C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C1742EFC5A1E818780679340 /* Assets.xcassets */; }; + BE2994BF2FFF272E62883953 /* swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = D414A6174931F533B0B286E8 /* swift.swift */; }; CAFD870CA84084E45011CC23 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4E32B0495E4BCEA4EE0508D4 /* LaunchScreen.storyboard */; }; D505E64F4CD6EAEB530BF851 /* Main.Section16Buttons.swift in Sources */ = {isa = PBXBuildFile; fileRef = A38A1AA6B57483F6B44CDF78 /* Main.Section16Buttons.swift */; }; DB1010B8A246D47BEC6B3FA6 /* Main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DF762100A8EDF105B6E136D /* Main.swift */; }; @@ -23,30 +21,26 @@ /* Begin PBXFileReference section */ 0DF762100A8EDF105B6E136D /* Main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.swift; sourceTree = ""; }; - 17E6ABD013AB08F7DF11C069 /* memorySide.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = memorySide.swift; sourceTree = ""; }; - 490862345F009401FB4E1199 /* memorySpace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = memorySpace.swift; sourceTree = ""; }; 4E32B0495E4BCEA4EE0508D4 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 6D5F2B2E3A26F03F6825608E /* Main.SectionSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.SectionSelection.swift; sourceTree = ""; }; - 9994AEAC20F4AB2DA70C9840 /* memoryGap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = memoryGap.swift; sourceTree = ""; }; 9AC22F19366076CF4168BFBD /* Main.SectionGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.SectionGrid.swift; sourceTree = ""; }; 9C71EDBDFFDBC96F6E8E7762 /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; }; 9D774FEE86833E8A0A74387C /* App.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; A355A898E25602F45B88CCBA /* Main.Platform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.Platform.swift; sourceTree = ""; }; A38A1AA6B57483F6B44CDF78 /* Main.Section16Buttons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.Section16Buttons.swift; sourceTree = ""; }; C1742EFC5A1E818780679340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + D414A6174931F533B0B286E8 /* swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swift.swift; sourceTree = ""; }; F16A7DD61EF6CD4FB4E3DE25 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ - 44681273C081F5991624384F /* Swift */ = { + 4F93BC5459F4AF4391816D4A /* shared */ = { isa = PBXGroup; children = ( - 9994AEAC20F4AB2DA70C9840 /* memoryGap.swift */, - 17E6ABD013AB08F7DF11C069 /* memorySide.swift */, - 490862345F009401FB4E1199 /* memorySpace.swift */, + D414A6174931F533B0B286E8 /* swift.swift */, ); - name = Swift; - path = ../../shared/Swift; + name = shared; + path = ../../shared; sourceTree = ""; }; 667BC26EA8068A9FA707FC02 /* src */ = { @@ -77,8 +71,8 @@ CD7F0F0C9CA1BA5EAFD5CA09 = { isa = PBXGroup; children = ( + 4F93BC5459F4AF4391816D4A /* shared */, 667BC26EA8068A9FA707FC02 /* src */, - 44681273C081F5991624384F /* Swift */, AE7B74413EC292E802CC5C70 /* Products */, ); sourceTree = ""; @@ -152,9 +146,7 @@ 3D03666F3BC2B1F2CBB49530 /* Main.SectionSelection.swift in Sources */, DB1010B8A246D47BEC6B3FA6 /* Main.swift in Sources */, 89086E3972F560A9A1A76CE4 /* Model.swift in Sources */, - 7B6D5211C387213AE05C080F /* memoryGap.swift in Sources */, - 3EA747EF132EF00B60CE3BA8 /* memorySide.swift in Sources */, - 248FA3B7A82DA60E6892F821 /* memorySpace.swift in Sources */, + BE2994BF2FFF272E62883953 /* swift.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/iOS/app/MMMemory.xcodeproj/project.xcworkspace/xcuserdata/mk.xcuserdatad/UserInterfaceState.xcuserstate b/iOS/app/MMMemory.xcodeproj/project.xcworkspace/xcuserdata/mk.xcuserdatad/UserInterfaceState.xcuserstate index 2aeda50b3b1882758360a67e60e28f0648da55f4..2b538177d825fe83be8768c557e7cb15592529b0 100644 GIT binary patch delta 15464 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 DLN#Y> delta 16736 zcmb8V2V7Iv`@ntAxf=%o*)xm~2nnLHH^>kOVT2WS7%DhWz&fht9{093wsu$*997(V z*S$xbRqNin)!N#j)%V;4)c)G{|9)Qb$xXQ9-1~jjdCrsP=rgeBHTXmi&djRpXV^k) zCAJaUi51g zE`T4wWpD*t1vkMX@ErUOUV+!(ZwMd_d1wJULrdrY-JuNnK?U@OU11Lx1jArBjD|5V z1!`a}EQC5}CD@&)-T`5XC`A}B!7R0pafWw4^0DHqC>l2g8vAElrIsP2@S%Ahn< zCY42HQ#q8D%BAwCe5!!bQj3vEw3&@Qwq?Lm9eKD3Nx!E5W@v_CSjLi(Fusf*qhS0Q zC8J^jn66A9(~arQgfP)e3=_*FG0BXE$z-yaY(~cvF%3*3)5Hv6K4OM4!}K{bdzpRAA?76WJ#(J zOg4+nW^-6ATfmmFe)f;V0Jh=g8h^=va{LG*w5KH>=*2p>{sm9>|AyM z`z^bYUBzx=WyzGUC9Z#jbF zIG*$1JUK7Uo0D-qoSgIJ{5S>Y&voTOxF{}~OX8Bb6a$yZWpRDETCR@k$Mxq1a09t| zZV)$^Yv4ZOMsZ`gaojX+IyZy+oSVa~=GJg)xpmxnZUeWG+r(|=ws2dyo!oxzD0hrI z%bnxSb62@*+#T*NcaM9+z2ylW@Q^2Yil=#oXL*k2c?-S+-;wXccjhhmp3b}r@5;OJ z?!1)u;5~U?zB}K858{LQ5I&TT=M(rOK9A4m3;04_#~1OXd>LQK_vQQZ_54U);1NIG zxPgu)5r{IrpbhvlVto@+3p#0qT%kZH6p91~p>+Ktb|36QcCH-MzqYX{Fz_6JBt=I? zB^Y;G#PKdtFS&o$Zo#2OzJrv@(+;ie-6Vm=t{oJN&Dc@ab1oUnJ4D)Hwi6imWVUJbL%PXvMZX@lR%<{j-@Sh@b& zPPV|&n^-_J6TZYkVv*2E2ohqk*5ZVCL21-jN{!DtSM+j7O-#}@>8twntRFC_p{B91 zwtir~zWV6Z#7SgnW$ByxwtzH3_;5#2=AfE^sRMKMm5majTw<-( z53e86RIaY+-IQCOQ`@I+lS%g=lQ`TAvV?jerd?`UP(&z}fLxFV@<9P81Ug}mFj#01 z8U^PjVaO6t3`#&L-j);I!bieT;b-9^1T2j=?MJ!Sfq{f#A?OGCg8{-YVYo12A*cs~ zz#!pc;kt0$ILaX*b|@IV1PsGII0AeOMuJhoNZ~V~Sy(0P5bg*QF9HD|Fb0gp+~dG_ zFab;ilfYy!1xy9gz;rOf_{d?k4-#exgfL2&Ef|HF!lyrgPq06KiZ3yO+2AwqIhX^! z0ACt+Iri@`NiYagg&D$VA=Vh;6sG+Kj9v)lf%#y8AP8fH@xsKjU?Et9ubqe$`)yHb zb&fX(5gi!db8lKgxEn1MCEojT&cr zZn7{%z#0rQ?&&T!YPwnR=KJmedyVd1cKE*gjC-72Yz}~f;84*ZYzx|^hT4IBgz3UG z<8$XozoXz-abkXMa&7+_v!&p>e7M6r+)41gG0#N>P8r9#bnS2kKf_rp_48ndai@#D z?I*%y^Jy2sB^*Zba?~y0qVb_iiQyW!UM{i05iO~@wyD0M7oLK)?UqlVR0KbCY zgfE1zg}LuFd<*=EweqF#m8ei>qqMhkq=ahM%?B!L-}QmI+Vlb$Q7^(gQ76Xlx`!Cw z_OLR%lNMyKRemDOD{ZW48ZxM7eM60Jd4%7;V4*~Wg$M={r~`fpQGHSXd&ADbA>`uIX>KS_#)q z_itbrXtK{`|FF+?@?aDBa!*3KQ`pYcH%biD5Ms!**fY|B9g(OnoPYEy9|AiXjt=0cOE$m?Nwe)(e~7 zOCi=ov`&aE5p`}kz~pi%`ax!4w21;1!D1|{4Z=oYj5%p)KTvMEeDi+_q}n8qttL}g zTOId-8C09Fx0agkrX8fOs`32~GZ+Xa!9j2^=5K^eaEP!Q^B)#=V*cC0LE+Fp&0r`T z_KttQ@ZCT8M`L~uXn+Dl!Y*O2uFN8xe{`~hANt_W8JSy^>`)sO*r5>VF+?9JQ5f@bbMU zy$dDp{N=;A(Iy-+&J;0z|5wB?;8`7h5Hi{IG^gFpv-`%VaS#LEO_ zxx`6ZKcr#(3T-NgC;MUVA^RhoI-A{xtjF$y2Qj_yRp!^k_NV)Z9EM$o9Et$jOb$nY z6P>4k97PJ)%*oO490EM{9umO|2w41w`$!7Bc0DtDN&A?S$f+hDA*Tp85$J@Sghaws ze7SLLuP&Z=0YlCrKP{Ko{%=xYS~InfMq`dgfZ>CLkNljR)2>eh>=3Z}r$)t$kDN!& zCl?@KjX)O!Z2tc$b-Aci1Z>}HRm|MlXU6}~>IQNvUc!+Z$xY;Dati_u2sk3(gn;uR zavQmwSVZnbzy$#hAszuQL0Kp!=He1SXUfgRZ$;*mU7Wg&^!64L0I*yAJ|ym zzXs=oO*IYT9oh%KOkNewzJh>vGkFaGnQ^6^b2NF2INU(&pur78jO*pOeojP&=~Y7vAnJ(*VmKj{+7MFw-}^l& zgq|2=^!1I6jEc_puIjIEY%CmFJFvQbXlf$Pzz5YdG~&D*$J6(V8^J=-LE!VtHQI=7 zp=aXa6M7o6^fqPX5;u)D>)rWzsYwH?uz6JH)by^w0lBKCB_Xj;qs^?W!&AfAp z=^Bx`U(N8wBK%ozI?&jXnkIAceSmX1O{DL`sWmr|UUrlf07{3bIRA9q@5(fZ z*yI-CUEK&FA2Z_r+Wn&k6^rW|R1g(Rg;1eX7!^)MP?1y=6;0u>q7lf!AF&9;A%Nph z0s=h|NJJnBfn)?ymQ!(5Je5H8#5SKqB~vLxGnGoEA=P&%rJDn=j`0eoHhLaLN1qskFbBan&jF37OK8E2_%jN?=d z2C9bYgWXvyXEjrO5y%jfXQ+PIwfa*7L?dge9Z=&XRt-mWKKL~P8nY@E)^Gm5{YC;cMvOrS0c|ri7J*#jRW0l0woBPB2b0^ zRzd{=dITyFzz> zcvDBHqgbb=x@QY@1naHs^5f#=2-Jxujx17A)M@IBaYd1=BlQDLT_~Jp)C&`hSBqr* zD4c~iQ`Zn^6ebo0c1u(BAEc_!&uEw1E$SJeSV`T6N!Z8kQTM3_)I;hK^%&YwPpO}% zpAi@$Y(oI2HaM^O7=cj;7!bf}94o9qU_1g75tzJ^dQSa9y)a&nv5TCFzybu;BXAUf zn+W`dU< zNNPSh2G=rDKDbC`-aW2d@@~cV!BK_z=!9}f3N|@^Wb*O}dw4y6-t8cc`L;dBHYNk`GqbPOF!$I z7!jC_z-O&=PjfO%r7h0$K8rYx8qA!fnzTj)V_J-!-`VYJdXRMUu_CJJN>J(eCvkEbWl6X{9xWO@pX&9E7P z76cX|un2+02rNNja*CaM83L`X^z=4?%xV+JXQDusw+m$DJAtfi6UahQAb6w|?E?As z{}jk7dW|TM)d;L=rq?2{S`>&gy^-D`@|>eL3zrdCgLz0~;;|5UoayiAJ!anBBJaBY zIbKa4qR)uDhv_5qQTiBtoIXLHq`#+6(WepEfWSrsHX*PXfh`DZMF2bQb_8}Hu(Opu z+s1pLjrX$1`&~QlzIVKbO}y#!Ly`9p0=wFIpJHD6C;DgnevZIy1ooJ=dxeRTP7)u9 zqFrUb(|?NOe;}~Gnf?ob10uN-{e}UeDZCX;;UG2z28xTJLpT9{9_j4Fa7+giIAbA# zAHmBV28zp_Ls%}3RaT4(#%8RUE{qLh%h)mYj05AyI5Ex$97EtZ0w)kSiNN;=oI(K0 z;tT?35jfY%xSFvU55`lhnJ_XD`+Ph0B?L@m69lfCuv3{H7@G+~;D50H)6Eu^;q+u$imk51DgiaTsuVQE+#?_#fGG$CTQ^Dw&N~VgbX0Wr}Lf|$6cM!OXz&!-+ zBk%x$hX`Q3J#Jj*4$#34+kPnJAIA>**A8Mg%^M zAl1yAMUXZFUtoR|m3$E^8JD)Pk}qQ=Ll!Ifv!32g%q_-T>|$`S3qcDJ_%fCUWJT>t zA2TmS;3v#e<|pQ7<{9&x`GtAG{L0{ovm=6?j3=@j{9Bpd+vr}ksq(EzXV*^W(5_18 zis|w|Tqg|2c1E~bY_4ChR{xhKSqIh$gRzbXIySS;2s#yRBF>ahF2rZFpM*FIDOJH#xCCQ%eY?=KQ1;lX~)P7ozAk{!j4 zW(};sB6bWrmL12AM=%7zP~*)!2Yh^D8}?Ll(U+YmV#l>(Cz#8=2qv2qkE=M%>^ubH z+o_vHtNvHrxBU^9vaKTRG6Z`zv&#`o6lon+v+K;XYem{5{NU#LtoYoH>=t&r8Ecz} zmGY0H)$AVjxJb2^-N)`{53mQ>L+oMp2z!)0hF~g!X$Ynxs75dYK@EbL2xcLejbKhI zd!h~WwAsYj^CGCW9kk$`iI3vbZ57>v|8$qo3eDfCTmzOxU6F*~r z5s9B8SlGCK@)Ls!UtF-~cgvWpXiGyosHQ6WIr1eR4fT+phl)+n(A!Rxd8yEQmBw5QE=eWb$$@ zn=29Jki%)YTrQ8x=L)z&PRA8-#RxVc*o5E^1V2J>D1yTf9FE`!1V2V_WGh$NCI`Ja zjB_=j97eUv!SF7Ok2A@kC)X&-0gpGjT@Lt%b39+eec~GnLBJ(Fym>E$(YVZnrGQ5g znmL3ZG6ivNJU0mgaTCN~HwFhgZn7A}$BOAmjek#~;BYv8VPH^o73 zAoz7NcMHL}f~*u5qBZ&fHRff%*k;piEB86GJ26}R$ubH8(caDQ@taj&@7VkyObDX!ReLJ)_o zRs?a_T7lq71Xr!!RNMyy@)909;UeCOx8}R>HVCdka4mxC5L~~Ax8v=32Odv!8xY)x z;3fn&8#7A3?8$o(hZpkRyo|?F&K3l}LvYW#iYV{Lt8l{xui*W8Ja248a2tZ#7xDpo zSKbc69SH8k0~-Cx=0x#feAIuON-gJOcw9m1hu|&*cMHlYLMnrV)KnAYds3=QE2@L> zb=iDQryWvNRZ~;FenI)S(69`*Hf_O8TL*|kxKH>P?i4;p+{9f&&xtpH2NK|jJAmDA zV~z)I%89~#Fr~O%WF)|gbKD6s1Gjs8iW@z?0AJw--+8!^YZJJHfA9Yjx9Y=BSZGjO{MmS8VFl~?lVJe~ru9QPvZq!63)egqFJ z;We*b!9xfh#=pI8G-|3^4Pv>7FK#Or8S*dU)L&DUTVJgoF4Z?l zy9Y)D_Avci#+PF+A*=-W&JFk~z6RHa#C^>?4!Xz0LKp5L<7@E`Yo;@CXP5Z@fVM6# z@%tb!x)s+&Zc`7T9X|v%g@XtDF#H?ibg?3Wt7QgU0>M9(9u%+%pTfU2&cwHSUvuJd z`yH-1!SDaG5W$Z#A3crh7g_^ucI}AQGak6fwFh2kL@-fIJkt}mw)SG`nF)-MX~7Bc z5}XXTGAo!>%o^OWx(9cw9$*eLN15ZeXY~|w9e1XtvQ4<1bRByFH;CS6f8|)*6xspL zM3#6K>cZJ__M9W9S~H+$!AOdBN1s`GR|c z8#*Cw=45aqXBXZUJC7spjQcm;ai6B1AHq-MSMuBVef$Cb5PyU}#-HPV;4kt&@>lq4 z{BIV#g{MWdMVdvrh1x=6QD9MN(a&O-#VCsj7R?r`EY@1Ax7cK{#bTSqd4t6@i&qwZ zTfFUT)!C_Y&(3L`8#`a@e6#cKo!?k?uyn9=vUIU@vy@tTT6$Y{v+Q9RY#C}9ZW(DA zZ5eA>ZaLi2Xt~OAr{zVk23mTx6MLP}@}i)ViiNs8oS$y~`|$x=zH zWQAmnWUJ($p`iE$chh_qu>C7G30B{JQwt%(D5)=3ARqn-w;zZPwbXx4B@jxnXnD z=C;ifn?G${+q|&_wxlg>>t!2g8*CeD8*Uq88)utfn`m2NJKA=tZHw(9+aGakas5 zt>b#fjgFfgw>oZj-08T>@uK5n$G@Dcon%h&PCcEHoKl=pozk5$oD5EroMt-Baxyx7 z<}}A?k<)6YjZT}LwmNNh`rhfH)9+5Not>S1ofXbX=K$yK&auw%&OM!zoHfn`&Lz&Z z&O@9H&d7PJ^LXdo&PSZDJKu5s%Y}65>|&6(Si7XSWVw{M=v@Z5eB{#Xvc%=I%QcsK zF2A_^>hjX%4_DyIx^{H+bj@+CaIJL}T*tf4b=~Q@%XN?IKGy@Thg^@i9&m%1Eu0OdxbN$8jl^b-U+!!~`&BD#z&C$)-&DAZ^E!r*3P3@*}%W^AqD|geoRk;l^ zxHY&nxqale-R-d3QMco6C*7{N{q6SF9k`S3v^(q0yLWK!#lHDx(B!ix_5Vv zbWd-NVB9lQbVpZUs^96ENzqykq(s(mwqfAC!H#tE}bcz zB{fPHNL!?fq)Vh*qz9yjq(`L3q^G6Vq&K9uq<5rGrGH6ZOW$}99x)#29vL2)9@!q{ z9)iahk8vIoJSKTe@tEc@!{ZZ=Wgg2tR(h=VSnILgW247+9tS)Qc^vUL=5fN~M~^E8 zk82(`JpS}}<;i(kcy{#c?CI?3>gn$3;Thl==-J&f$g{~4d5-lQ?>W(Pv*&)#OP-fK zuX)v;~?|DD)e&qe9jFxdSE19*-M&>GWmnmi4WIbfTvItp}EJhY5OP1xy zs$}D26J(QQQ)JU*Gi0C0K9$Xut(2{nt(C2pZIo@6ZI$hn9g!WAosfMmJ1x5=yJ3*s zlHKuvK9rA@PZu9sAA28fA0HoIAB9h-Pqzv;4XIh5V)b5BXod_P!y$MZP0_7x*6ZedNdc`T8aKY5cPN za{coC%KiHK)%o@J8|XL4uffmYH^y(g-z2}Oe$)M0{WkmU@Z06L$M2xu5x-*wzY~5} z{I2=k_xsiFPrp}wZxp10R&WXng`>h#5uu1x6ewyHV-({RlN3`F(-bolpD4amEKn>| zEKw{|ELUt%Y*Xw|e5W|3IHCAnaawUraZ_8$is`YQvJ-IP6)!OB!+zEYUqt!k8Nf@-R2hH93|s9K=yVbH&`D$EO=({-r#e=&qKO| z$U@>mGD31g3POrPN<*qc`h?Vl3<#+Y`6T3U$n%glp&*nDWkUJT4xu)oE}^ne-_UNM zVWH8XX`vaRnV~tMd7%ZN6`^&Z145UFZU{XXdLs0P(A%N+451H0pM?G#`aG;_SXfwm zSYlXqSbmr;tRzeyRvp$StTt?6*x9ffVYkEXg*^;=682NrtFXVr-iE{Qp5a;HRpGtE zYs348*M~QR4+$R@{&D!|@LA!r!{>y575+{5g7AgmOTw3hFArZCzAOA_`11%l!XqLw zA|*l}(G)Q%Vob#N2*ad^DG_rbS|V0Ptch43@qNU_h#L`iBYuhaE#i+zn@HD4MWlbE zGBO~tS7df%Ze&5EF0wjuK;-bqF_GgVCq+(){4BC1a%bf3$i0yVA`eF%i#!>5I`UlP zg~&^hS0b-R-irJ?iijekm?%D~W0Yl-b(C$CLzHurTa-tXca%?54?|RNRA^L0)QG5w zQIn&lM$L#i67@sW#i$>nu0}gW%cK3G{i6e-dq+1$4~ZTcJtBHf^vUQ`(PyI1$JoSp z#CXNXVtiu;#Egg;88bQt#q5bW8FMP;Ow9RM_gH0YKx|-akJw?c<6|erPL7=xyEpdx z*gLWJV;{vnjeQpTBKBqMpRtD5v2WvGoPC^AoJ*WroHWiW&L_?{P7$Yy>l)WBP7^mE zZdTm-xC?QA$9u%b#h1sAj2|CADSm4F^!U%?=f^k4FN|Lt|84xT_)YO!<9EdGir*W* zKmKO?Pw_9}U&j9t|91kBKqk-$HVJkK?g`Qa&xEcCK?xxV;R!Jb@d=3u$%cfygvx}W z2_q6lB?t*)6DA}~PMDT3GvU*O&k|Y_Rwk@YSevjuVN=4^gzX7C6Lu%;P1v7svnSEh zyJvFGx}Kl(+|cuE&tDQP6CDzr6WtP}iGGRQ6N3^%62lTB5~C7R6V-{Ci8+aRi3N#G zi70VG;-ti>iJv4I6F*PE~qI@>6sv#VK_uLsO=u%uM+-<+GG8Qoc@^ zm(rZFDCOIf)|6c-dsFtO985W!axCR!%BhqyDd$rzq+CjQ*~_+9c(3AKhF*(%9qIKT zl}+_dRiy@|_DBs*jY&;OO-s#4%}Uj#=A{}6Qgx}lQ)^TEr`D%7q&B6_N}ZRwFm*}l z($tlyYf{&xZb;pidNB3-)GMhsQ*Woe* z>H7`ohtiLxA5TA@el7h*`mOXk>G#qfr2m%wNBXPuH)^0J)l#)e-CZ4|4pm2~W7P5L zp6VQRu3E3|t?sMtryitkP!CZLRZmbG)l1dO)vMHN)f?2C)!WoN)w|XE)Cbj<)z{QF z)VI`k)c4ho)KAnush_J~sDI0_&ghnrmth#1@pZV$ z(e%~SX$ENOHG?&yHApi~Gf^`|GflHhvq`gE^POh5=78p~=BVbl=CbCR=Dy}v&7YcA znm3tbCY{M;T4XwA`ea6C#$?84CT6B&re$ViW@TzK^D}js12YF_Hf9dV9GW@8kU1*T zkcl$KWlqSPl({%_f98WMi>!dG+^k_)bFwyNoz1$Ebv^4=)}5@USueBx$oebmb=I3~ zBD+(zB)dztUAAMkb9PvEQg&K)Ms{X)ZgxR-QFcjozw80oBeD(ID0^J?$ocf$uIU92>=e*UrX`{78+A3{tZLPMSwn;lmD`>}RCuk>Yr)sBbXKLqa=WAQE zi?vI&t=dD{bJ|PV%i3$&+uFO@2iiy4KeexO`P|OAlH4x24!KUbuDR~H0lATe+^k$} zZho#VwLFi~NrHo%1F6*7-L19{Jw+@_a?UD!*&KI$xJx zmS2%ymESkNF28^N!2D79Q}So#&&oH<&i^w1>-=x>=jX4=-=2Re|7`vb`IqvqwqOEd09go5I$@m4#~x*B5Ro+){YH@K)jd!iR-V z4291Ne=YpI@J}75>!5Scx$4|?o;tZsp;PI)>SA>1x(Z#DuD7mM*I!q!YtRkR4by$B z8?7_yKG%Jr`${)gH(%GHTclf}Tc%sCTd6y$dsx(|sB4k7Xn4^#MLUWv7yVHTim76@ zm@l?2b}n`+_9*r)mKXaKhZKhwM->}lixY|yi}l3=iyMoF6b~yNRct68Q#`KNSp0eM z!s4aHt;H*g*A;Il-dw!3_;B(0;zz|#i=P$0D1KS|XYuRew9CEg`I zC4ME!l7N!Hk{%_&C7~s`C5O1734k_!4;tu;T6dh zsTJyq%!-_f+={^!qbtT%OsJStF}>oGicc$MS1hbpT(PcVbH&z*9Tj^j_Ej9LI9zd| z;!ef=iboYsE1p&Sq9^o}-b(MI_tPu&UG?4d!TKp4{tNwD{Zai@{jZgLWtU3d%DBp$%IeC+l`AUuRvxK5S9!DYQRUOh zXO%B1Usk@Yf>m@CSJk1aQgIRUN82S#`SV zT-AlDYgIR^?o{2cdRT2;9ar7IdPw!qYQwndsns*8XI0Ox{Lt}Ht2gyM z(D!iP^L=miz1#Oe-^YD_>ifL!ueG3-s%2{V+K#oIYbCYTwV|~owG(RB)NZZaTYIeb zWbM`3d$kX1AJ;yu{j2ux+P8JEj;>?tBz0ZtZ0qdnq;(#3UUka4_`05T$#to9>2;dA ytf;!2y1crAI$d3HUEjL8y8dG%)sM}PxrEa^qnh2r!lb>MzY~R-X@&5p5uS-Y( diff --git a/iOS/app/project.yml b/iOS/app/project.yml index 474936c..016fd4d 100644 --- a/iOS/app/project.yml +++ b/iOS/app/project.yml @@ -8,7 +8,7 @@ targets: deploymentTarget: "16.0" sources: - path: "../src" - - path: "../../shared/Swift" + - path: "../../shared/swift.swift" settings: base: INFOPLIST_FILE: Info.plist diff --git a/shared/gen b/shared/gen index d4c4b85..b63f016 100755 --- a/shared/gen +++ b/shared/gen @@ -3,5 +3,5 @@ SCRIPT_DIR=$(cd "$(dirname "$0")" ; pwd -P) tsc $SCRIPT_DIR/typeScript.ts --outfile $SCRIPT_DIR/javaScript.js -#$SCRIPT_DIR/../toSwift $SCRIPT_DIR/typeScript.ts $SCRIPT_DIR/swift.swift +$SCRIPT_DIR/../toSwift $SCRIPT_DIR/typeScript.ts $SCRIPT_DIR/swift.swift diff --git a/shared/swift.swift b/shared/swift.swift new file mode 100644 index 0000000..4973e36 --- /dev/null +++ b/shared/swift.swift @@ -0,0 +1,32 @@ +protocol Context { + var itemsCount: Float { get } +} + +protocol Position { + var x: Float { get } + var y: Float { get } +} + +func memoryGap() -> Float { + return memorySide() + memorySpace() +} + +func memorySide() -> Float { + return 50 +} + +func memorySpace() -> Float { + return 20 +} + +func memoryItemPositions(c: Context) -> [Position] { + var pos: [Position] = [] + for (var i = 0; i < c.itemsCount; i++) { + let row = Math.floor(i / 4) + let x = memoryGap() + (i - row * 4) * memoryGap() + let y = memoryGap() + row * memoryGap() + // @ts-ignore + pos.push(memoryCreatePosition(x, y)) + } + return pos +} diff --git a/toSwift b/toSwift index 9bcc98b..77ab809 100755 --- a/toSwift +++ b/toSwift @@ -39,6 +39,7 @@ function convert(line) { result = result.replace(src, dst); } result = protocolReplace(result); + result = typeArrayReplace(result); return result; } @@ -51,7 +52,6 @@ function protocolReplace(line) { if (line == "}") { isProtocol = false; } - console.log("ИГР protocolR-1 isP/line:", isProtocol, line); if (!isProtocol) { return line; } @@ -60,7 +60,6 @@ function protocolReplace(line) { if (isProtocol) { result = protocolReplaceVariable(result); } - console.log("ИГР protocolR-2 isP/line:", isProtocol, line); return result; } @@ -71,8 +70,26 @@ function protocolReplaceVariable(line) { let name = parts[0].trim(); let spaceLength = parts[0].length - name.length; let spaces = " ".repeat(spaceLength); - //console.log("Variable. name/spaceL/parts:", name, spaceLength, parts); return `${spaces}var ${name}: ${type} { get }`; } return line; } + +// func memoryItemPositions(c: Context) -> Position[] { +// var pos: Position[] = [] + +function typeArrayReplace(line) { + let parts = line.split(" "); + for (var i in parts) { + let part = parts[i]; + if ( + part != "[]" && + part.endsWith("[]") + ) { + let type = part.substring(0, part.length - 2) + let swiftType = `[${type}]`; + return line.replace(part, swiftType); + } + } + return line; +} diff --git a/будущее b/будущее index e5ad2b7..0b32b11 100644 --- a/будущее +++ b/будущее @@ -1,25 +1,10 @@ -08.06: 19:30- - -* перейти на один файл ts -* перейти на один файл js -* оставить в файле ts лишь interfaces -* ввести внешние функции создания экземпляров интерфейсов в js - * web/platform.js НАДО: +* конвертировать for loop +* конвертить Math.floor * перейти на один файл swift -* генерить по одному файлу в shared - * в проектах ссылаться по одному файлу -* исправить ошибку tsc: cannot find name -* в shared помещать лишь функции и интерфейсы без объявления типов - * ибо дофига работы -* генерить class в Swift? - * нет struct, к сожалению - * может, стоит остановиться и на протоколах/интерфейсах? * генерить memoryItemPositions.swift -* генерить библиотеку на основе иных replacements -* ввести общую библиотеку -* генерить itemPositions -* оптимизация - * разделить функции на разные файлы - * будет ошибка tsc: cannot find name +* ввести общую библиотеку? + +* в конце: разделить функции на разные файлы + * будет ошибка tsc: cannot find name, так что придётся покумекать diff --git a/прошлое b/прошлое index 14e382f..1ee094e 100644 --- a/прошлое +++ b/прошлое @@ -1,3 +1,21 @@ +08.06: 30 + +* перейти на один файл ts +* перейти на один файл js +* оставить в файле ts лишь interfaces +* ввести внешние функции создания экземпляров интерфейсов в js + * web/platform.js +* конвертировать Position[] +* генерить по одному файлу в shared + * в проектах ссылаться по одному файлу +* исправить ошибку tsc: cannot find name +* в shared помещать лишь функции и интерфейсы без объявления типов + * ибо дофига работы +* генерить class в Swift? + * нет struct, к сожалению + * может, стоит остановиться и на протоколах/интерфейсах? + * да + 06.06: 25 * починить ^M