From fcb6bc27b84ca0d8252eb7bd719d2798f43bceaa Mon Sep 17 00:00:00 2001 From: Yufei Lang Date: Sat, 27 Apr 2013 14:44:26 -0400 Subject: [PATCH] added ADiagnostic class --- Aircraft.xcodeproj/project.pbxproj | 15 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 33383 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 16995 bytes .../WorkspaceSettings.xcsettings | 10 ++ .../xcschemes/Aircraft.xcscheme | 86 +++++++++++ .../xcschemes/AircraftPlus.xcscheme | 86 +++++++++++ .../xcschemes/xcschememanagement.plist | 32 ++++ .../xcschemes/Aircraft.xcscheme | 86 +++++++++++ .../xcschemes/AircraftPlus.xcscheme | 86 +++++++++++ .../xcschemes/xcschememanagement.plist | 32 ++++ Aircraft/.DS_Store | Bin 12292 -> 15364 bytes Aircraft/ADiagnostic.h | 66 ++++++++ Aircraft/ADiagnostic.m | 141 ++++++++++++++++++ 13 files changed, 639 insertions(+), 1 deletion(-) create mode 100644 Aircraft.xcodeproj/project.xcworkspace/xcuserdata/Yufei.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/Aircraft.xcscheme create mode 100644 Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/AircraftPlus.xcscheme create mode 100644 Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/Aircraft.xcscheme create mode 100644 Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/AircraftPlus.xcscheme create mode 100644 Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100755 Aircraft/ADiagnostic.h create mode 100755 Aircraft/ADiagnostic.m diff --git a/Aircraft.xcodeproj/project.pbxproj b/Aircraft.xcodeproj/project.pbxproj index b67579d..428e030 100644 --- a/Aircraft.xcodeproj/project.pbxproj +++ b/Aircraft.xcodeproj/project.pbxproj @@ -610,6 +610,8 @@ 9FB043F516B9D93D0067A04F /* battleFieldBar_self@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9FB043E516B9D93D0067A04F /* battleFieldBar_self@2x.png */; }; 9FB0B4F5169CFBAD00416B93 /* ABattleFieldModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FB0B4F4169CFBAD00416B93 /* ABattleFieldModel.m */; }; 9FB0B4F6169CFBAD00416B93 /* ABattleFieldModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FB0B4F4169CFBAD00416B93 /* ABattleFieldModel.m */; }; + E43FB4E41713627700C163A2 /* ADiagnostic.m in Sources */ = {isa = PBXBuildFile; fileRef = E43FB4E31713627700C163A2 /* ADiagnostic.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + E43FB4E51713627700C163A2 /* ADiagnostic.m in Sources */ = {isa = PBXBuildFile; fileRef = E43FB4E31713627700C163A2 /* ADiagnostic.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -960,6 +962,8 @@ 9FB043E516B9D93D0067A04F /* battleFieldBar_self@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "battleFieldBar_self@2x.png"; path = "Aircraft/res/battleFieldBar_self@2x.png"; sourceTree = ""; }; 9FB0B4F3169CFBAC00416B93 /* ABattleFieldModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ABattleFieldModel.h; path = Model/ABattleFieldModel.h; sourceTree = ""; }; 9FB0B4F4169CFBAD00416B93 /* ABattleFieldModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ABattleFieldModel.m; path = Model/ABattleFieldModel.m; sourceTree = ""; }; + E43FB4E21713627700C163A2 /* ADiagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADiagnostic.h; sourceTree = ""; }; + E43FB4E31713627700C163A2 /* ADiagnostic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADiagnostic.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1034,6 +1038,8 @@ 9F049CD516842BBA007F5AC2 /* AAppDelegate.m */, 0CD7213116C6C73D001BAD5D /* ASetting.h */, 0CD7213216C6C73D001BAD5D /* ASetting.m */, + E43FB4E21713627700C163A2 /* ADiagnostic.h */, + E43FB4E31713627700C163A2 /* ADiagnostic.m */, 9F049CCC16842BBA007F5AC2 /* Supporting Files */, ); path = Aircraft; @@ -2095,6 +2101,7 @@ 0CA9D30E16D5B7A00059D7D4 /* ALoadSavedGameScreenViewController.m in Sources */, 0CA9D31616D5E1190059D7D4 /* ASavedRecordItem.m in Sources */, 0CA9D32D16D5F0870059D7D4 /* ASavedGameRecord.m in Sources */, + E43FB4E41713627700C163A2 /* ADiagnostic.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2142,6 +2149,7 @@ 0CA9D30F16D5B7A00059D7D4 /* ALoadSavedGameScreenViewController.m in Sources */, 0CA9D31716D5E1190059D7D4 /* ASavedRecordItem.m in Sources */, 0CA9D32E16D5F0870059D7D4 /* ASavedGameRecord.m in Sources */, + E43FB4E51713627700C163A2 /* ADiagnostic.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2225,8 +2233,10 @@ GCC_PREFIX_HEADER = "Aircraft/Aircraft-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", + "A_LOG_VERBOSE=1", + "A_ASSERT_ENABLED=1", "LITE_VERSION=1", - "$(inherited)", + "A_LOG_ERROR=1", ); INFOPLIST_FILE = "Aircraft/Aircraft-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 5.0; @@ -2262,6 +2272,9 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "PLUS_VERSION=1", + "A_ASSERT_ENABLED=1", + "A_LOG_VERBOSE=1", + A_LOG_ERROR, ); INFOPLIST_FILE = AircraftPlusInfo.plist; IPHONEOS_DEPLOYMENT_TARGET = 5.0; diff --git a/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/Yufei.xcuserdatad/UserInterfaceState.xcuserstate b/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/Yufei.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..82f665d6cc0f3363441c23a56686ab75fcb182c7 GIT binary patch literal 33383 zcmdUY2YeI9^8fAWiYt)}ZWtRIo9^CCwJgcDu$om|u#J!<*_NB+MhOt^LV5xTArMH% zCIQkzNbezy^ia|Z>6P>zlKf}ye6mD)5b}QS^H1K3ZE5zqv$Hd^v$K11&Av`gUw?M? zJ^~RWAtNY)CYX@qkd(T#Meg1{kGH!n&D-4WcJ}wxr#X6^Z65g8n%3|2MG@$n>uyt! zr36ca5Tl7PL^P2>WD;3KHjzW*5_v>EQ9u+DMMN>7CNxAjQ9)D^2Et0%h(@BBa1yPA zm+%oi#3EuTv4U7doJ*WXTt=)XHV~H+8;NU(Yl$ty&BQIlt;B7_?Zgh^e&PY*Vd4>D z7qOdomUxcXPrORJM!ZhELA*)4OMFdyLwrkoM|@BGK>UdIqc_ky=m7cgE6A(K z>&PMU268)jGkF`igS?BpmwbSHn0$YqMt(_t zO@2rINd7|pPW~w)WHK2e3zbF4PLoB+qGfTi1X+?SMV2O;ESo0FkY&sAWQDR4*(}*y zS(!{DtCUsA46$10G z@5|5CnvY%zY$qvc>rbvpWLa1CyiP)iNQIAu*s3)i=si&wt)Lv>IwV!&Q`hfb7 z`iT0N`h@zF`i%OK`ic6P`i1(H`i=UX`h#Za5IU3&qr>S4I+7kmkEIjnadaX*nVwFk z(}i>qT}+qIDq2lzXd`W+tLa+0j;^O2bTjRwU9_9_(muL}?xmN~tLU@nv*~l_bLsQw z^XYZ;W%PP_1AQI6nI5EXpl_t_ryrmnq#vRmrXQhq(NED&)6dY))34KS(+BAH>5u78 z=r8Cm>2K(7=^yEzm{2B+31=dhNM;ms8Y5>E%w%Q?GnJXfOlQ)W3?`GwVzQYWCYLE^ zDws+}%gke{7#*W$42+erF%3*3)55eeZH$NMVpcL7!!u_xtC+Kxvzc?4bD4F_Wz2eJ z19Kg-nc2$R#N5o>&fLk|&D_I0z&yx2$~?h5$?RrcU|wY2WZq)lX5L}mWj?ca_o8R`RrQuQg$7C8G8e}mEFc}XK!S0VsB<|VQ*!3vUjl$un)3Nuurlt zurIRv*f-e&>?iD3?6>UC?4b}UgbrasMunUfA`giRi4PeYk`OY^mexJc*}0bpCBles zB7!)Lh^jSMGCSN$`{u*XVeeIw=InIz^$ik{#3+vBWP^m9P;eBFws5(2`53KQQ|s;R z=<_+8Znf7r(B$j!(rEYHbPmKUpYi}IzO zV~7+Y{YD~|h$G^Ou|xtfjz}bui19=+M{^9vav@wO7siEi5nLoU>PBJ$kxHZy6NyR0 zWMT?275<*UoyN(zBp&&A)W@SGJi44m8{xy#xD?>Atk>=6@OeGm{e4Pjzh{x7-|e!? z$Ew{ej)Bg8jmy*T?X~p7r+ww#UYl9hXP3vS-OU57t)A}IT2HsjySU8V=2+zM_BILt zZi}j%Mz&B`2oZkN!| z)4$a0_IZ0jVy8*M6Z-=e;>>O*v=P~pz8&UH>GPF?u=}*#dQZ2<&nqw#^tZ~}-RJFe zhe(nxA?6V2TZkFNOkx%>n^SO6+-Pph7Gf?@N+^jkE}EObqf8z-vDgagoL-kZ6DGLI z)1Mj4MrQSZ$JwFtdOPqa9lf4DZ?{Ncmluicg#YH5dcAlJv<&$0Fb_uwqOr>-9j`}= zcc9nlRsl9?qL21}#xVq;DqXaWR_-9T(4~>?Mp~0VblFFcTJR1I;i+4e+zq z-3e2=$juR492aYsn_4`b?ipEGonEJ-v(4MrpJnTV+0CjSXmNY8KnFTtfrp=q+?`$@ zHiayur`Or*Xz8zTbh-V1WM!%?b_-~odk;}V)Dm?>{e02Px`C`t{MFrOGgx502Z{Ma zgZOKm!D19*3TY%wgdLA$0XKFtv5-r^(-v=WcY?&-E=gr{z$;eEzCD7SyNH&}gqs`3 zCGR8J2oKQ?BTpkb2@3&=8w0cLpIVcn)omE)YIgV5_j|fPza3q^2G_8S17lngm&nC( z<5QLQq+4#)y^td(#NqT3puXb*p$_L|i0CHwj8 zmbjFg#uai!Jj%ecJ0-|uM3c+x6HG$~J|?pd!qWal9`|CqJpCx7rd~IAv4K9Tqqo&P z>{?XVy&s+Yn5tx#XB-9HE`C-v;OTT(-2LDWTl+*7rJ-&juEe6gf}6gXxQa{1BT~Q= zTQJu(z_qsD-8HPI*AYX5#AafU%i!|30tw)HVjB@PNZdedDW~L8 zYQzbw5jDmxpK#1E`u)uD1W_mXLs24cVTruWm2t@uL+=rv5a~A%2Z;BH4~P$mkBE;s z6{qGjTsc?4Ro*~+N_+zC~I~_h)UXukSOorvh=kD!a znyiA=z17?6af7D&J!CME@Lk$5ho|;{Z8?_eg#{=zfK2M6#?d(d9w&e*F@P%A9z>Kt zSxP7dSO5Y*L^1tD4BaMwm-w0Zh4_{Djrg7TgE&O|N&H3pjR=GgiDZaEG-42oLQp6Q zL*Xa_MWRvYG$cm~6op2kF(?|vpjZ@#;?Y=?fX1Ojl!V5kWR!v?pj4EGCZb7bGMa*> zqG@P4N=F$e6J?=nl!J0n9?C}rs1OyQVpM`=pqXeEnvLe5xu_H=Q5jMpHPWDRRDmjy z7R^IdNQd;ufQ-n5s*xF4kQLcb4XQn+JG)c8__0o1-cSlg|0@|pli`}Xfql_Lud=S z9^HVpqHSn9x)I%kZbrADThVRkc60~Yf$l^*(Ou|nbPu{0-G}Z+51XLILp=W^$9=W`cu7jhSItGPAY z#oQ&_TJBPA9d{YGp4-4(&TZs2aaV9xa#wLzbJuX!a@TR2xj}A-+rnMX-N0?-wsG6J z8@Zdfo4H%KTe;h~+qpZq9o(JVPVO%5ZtfoLUhY2be(nM8LGB^$VeS#`QSLGBac&p) z1otHO6!$du47ZzmmV1tSo_m3Nk$Z`InR|uX!|mnvar?Pfx!1VYxi`2sxwp8txp%mC zx%apO-22=I+=tvp+{fG}+^5`U+~?dE+?U)}+(GVZ?i=n~?mO;#?g#Ei?kDbN?icP? z?lrSJ$M3wOVV{8VyRF z-J-6t2rCkL6TJod0RP%z5tH^=Ftm^>Av7&15o~ts1r6q*GeUjb^={hc9u1 zgu@%uD0N!30PH9H8WYAN(QW&elI6=S_4+_|zdHt*v20!-*^iiP;!)5lm1fMQS)(%Q zO%}UaYnF!g3vQA$+{EY;BIf1G%WPVm+FqkHYn2A8pV{9rZNlNS6)KgzMq{?Xyh@;d zV!|nh6RI_3whFt}fF-5GYG40q%|ETAkKVVOJT|8mW;C zH!3~6k$bYoIhp2BS?q9L;Pq*i||u^lY&L z<0`unG`N1gMiL?!iksyg-pry>8th6P=(^EnR%z_Oy#_cinn4BvSCU}K2;6=m!n?d= ziw7dN?$+hY@hI&UZH2+EF<7-$okkBo{Y_58P129q#H<JGVQRI zMr)gWh6#S0BkwjR92`2|3YfY6#gT@GcWJGs@rC|`!tK7Za z?#^Tgf(JU?%a_B1fo<9iO1+=&YD_o|9i0#)XZ8!&dOS#r)#x|2T1=R949H-&P0q)( zu}J6X?hrgsna!XE4s}NCJ0%G;VWNp6MCy8-whTOn9#lqK1`gUV|^}So+J1I?+{0LLb1yF(W)-2JGNdty+Vh?Mkt@S29>=~G3%m|6m49Xz*QHePoQv|4uxR&VD zLCeEgm?%JP{L8vtX#pYHA(GLktUq(I-O`wFx27r z0s_b&y?O|@O+7|io7H3kvl2pXsk29q(^*hAYLG5?8XP%EZFe1~GjTSCV{NIyQ@BCU zY>!A_q%(RExI2NowSf7DbaKjdRWjU<1N~=<8^E_@dIk1i70Q^zEQHPyYU{LcC zZWI^XNQg9o7UVscDlLdg&?Y=}c5uH(%69(|12Eajbg*YQ4ll3cHd6w7!7&Hur=WFG zKNI^Jl1+~OHoO_v)#62R*!9^!xWWGK zecWi`VU0!<{b(-pBiv-dVNJw=Oa0(E@GH}&m_GF|dU27eKWc+7aD(xOH85-DAC>qZ zCZ2T|v8GPgdV%W)mjjztSl0taVz=1JU~?=u=744L+oK^3Z{ki4=?9E-_)G}0KaQAw z7DsJ^jDE6JIB*4*EP4g227FtPH~8&n!~&VJ951wj2b6T^5GIa8!N>w}CG2M;s=qN+ z?9r&qT1g#cBqmBjHR3HGan%@(@W5{gi+gaSC!=wTq@WhV6he|9(B;ZPFzv)+(~3(Z zglH<=FxRqh+$8zfO+;@cQIGl$)D~O$$Vwwq9FukIsx0*o(RF_<>x*n9{R;*YOo zv6x&5C*7UyWSy=?pX`LAW;lNBP0r8EP0mObk^~j*Zg;P6yt#Zi&cBpH5QRf1l@Rp`>oL#O}HP4-CT^CcM{^oW?|P^jS@fs2AFjc0GKVa2HdWo zlOutktQaHBJxL@`7Ko4akk2fGoDoiI3yEmiObk|hl3;=*LwZz7*U9E!l#}%b)=D#M zRxQeMJVKnZ^fRTza5GPmDVxD;gp`%eXf*kO)EMYE_N8-lw+_Hn3eiESAOmgJTI_J4 z12UShC&wR1f~vq!GmgzuFx0R~$!7)NEtDP0>jN@;^E0qHT& zanxW0Nc5Jfy1HY7nJ`$viHt4)OxUPP=_#4zgdwnItH5YMIF@>YRVnR_WHlI~@I<)4 z5L$x}*+P^XkP491V~i7?^5J<>nM@Fnsx+pc1*8!}6`d$M0Z?Yxxk=Mx#~`W`1sTbQ zNM8Q%bcn1O10H8t8=3b2$0jVhM~={qv5sT?N5z5_5^I+zlad{Fm0E)s8QaTk1|b><2JAj*K(nR-cIFV09v!d;10Kgy zjSOA18)1Hh$$+emRqM~H%KA@Ah7i_+?}YI}e2CK?U<2ym&70ibwOHM@p zL=K15Sl|(sRY{Fc$1tTQ0)w?~gf09l#H7LdZP^Npc0%rE80|<1?xYwR9+hyY2KgRo zGX0vi3ZtE@*DxvJ^bAhU#C@jgdaA4hE{ey1}HyKQHue> zaPCw(NfdXB0a|bo#+-j_Ot^do_uicDzCK}7G%WRzTuwle1>#Pt9eP!Ru}Kr{m*d5_ zpW_5ywT@nVaF}fJc6y*Uaoxq)KmeDZ_yjT#PzwSF~T zkC7^lEr+8bS;5w1ZOK{ zMzudK*o`^U53?@6>lmMyChi^|`{lemk2WY34qgESh0rWPkSq!Rc2!`0RQBAzB@!XH1|1bQw2+bUi{wSz#Xs`)evu5D7aXda{gQYE!~P?^ z2{2%b&0+!rHrgz9zbzkW#`|zr?f*pRcm(324gu5fr2sf9k%Wa+=Qzv#Yq;N*Q|woA zQBou-WQFlv4&esS5h2E#xX+q@+NZF>;ZccUhOo!Ns|RG}4Ayc!YjC^V~VlxQH zI%S#0pY;D6!~Uc7({Fmiu=w_m9u^#bmg=j2jbpe6YV%w5H~*T5h3lGdhAxTtdyIUX z+(AI-rkXw-4*7*Ej)Fo%#s=1Syom?4?8aqZI@#EZMe@^ZL1U@V7wMJlsD`TQ3K z*PJ+bfRrI^m|Zt=S}XBOAq;t9A*}dZ96YL*tO}k$wG9Vq_!bN(aiviWOplxjQ55ds z#KN>=^&n(1{7Z<^YQ*Oz5FWq*v~}d@lw$v-o}}ntxCb~MhV&+cRa(E)!v3Mu{AvW- zV>s^+mn}$q3OA0eMwL-=E>tA$!Er)U9V9h>4|;3$IOrWd_svN5-^~z6VlB(8=S<77bE=_MFQ{FQ&VsU%9HEBB%lV~((s%7 zbPQMUPvHCznHVDf&tOrN3%VvrMu#DdrvfRiZc
LVX3YjUTaDx`kvn1377*&6q;al9!fnKPvafHRebz_?u-_93~2k}|H z$_T(C)8)X>+Eapt19>>u2cDHC>6DgoVc5D;f`vr|Gp_+uxIrN7v^8omZzsv6754%U z3m)D5fc5@oxdiqC&$5_m;fAz75l*$^4ov@A2l^^}M@)K5gX+TQr#7vD?3>}xN|KBZ zLm$s+oSbAJ8dI74UcV268~!z^)WAh$2ppj>4>dpxZKf9SXqx}=Qc5@|Jx-qEBu?6v zFBhuE$dT|2Dz$<-1Mbp_&#l8F>9}^w;q^C$sFf6l%N-n_?C8Zih9C2%&ZJfm>DOI{ zYi$VShp2O?)$rUubuM)tbv|_gbs=>TkFt1_!=pSN74QfOV3gcIt)VWaE}_;^ms0C^ zG?Pav9#!zj$fH^w*@FsqP#baK4jyIOIa zLe&9xZ)R6O85!zov3n?yWdE1C$7O@ElvZ5V1b3`-IeZW;XSN0QIwU42;|Q=7NjZM0-U z!3E)?04jKVd4!-aGbgjp)sbac3gwl$vUHy2Ua0kwRo)9l6c*#ER9QAHE?(3keUMe@ zcDQiC9-G!L$Y2THERLlZ_B%(6<)791QK~&qg9K^?d7Qyr-63{0kDYmT#4+ z|G>TG!@jEV^m#xb!6JGcP;{u*4Cl`7rb>^?4X4oBzP#}xUCTNKW15!bloXegq$lSU6c?;$SeBbpn4bef%JmQF5RLGV z{-pk*{-&Y0LmiLmc{HC#4O?iEmJt(ZDDlw9qb5A01^?3_;W}8)M8hERia>?)v-4NX zUzU@bT?~KZN#mhUqsJU`JkfLvj0e`Og*LThw8tPM&2y3Qmh)$)`XsA)q!lQN`bp1$qse;u}9I)l!^T)qj`_8OR&U~82_bS|Ao=kutQM{PXvK;0qi1hTOQ z0O1wo6|KOfi}dS${Pi~pXa)_%?2ZOhN-G7R4jy%KDf3}6a?_IwO7cXAjep#Iz64QD z&pSGVj@Anh-8}MgDNV~t@``e?Q_9OO5m5$SK7WsdVy3N7)QYz7sAn^6<54fPfZ}Jk zl8;!k!(a4BYB8T~BGL!x1{$=spGO0O^a9$>BM9;qWA#-)Yp5XymzShM81QVW|FghS zB9QBHE$Vj(v>6^BUN&ds=asl~^BmbuSAMoDx1hMFr3ILG6y_C`IP;2J1+KiDV(=O* zHICk{MMW(VPc3vi$bxRA+h`Aumh$Ly9xWT9JLpbg5094fXaf|40_L)Tk>KKmIL`uw z4xx6HWuObM8{()f?p9nP0sMd55lx0uF=D~FU^J_zztb&5zH}ckw1w`c2k1rgVjivF z(OEn?k4LNh<-q9E=`%3X%jo4ae0>IwR`Q4&qF2%!&GQKUcP5WkVXh|~!9oy|us}g^ zsQ#t!)a3CA%ivK^iyJB)I-q(VRLD3!wb+MH7%H_?s3ArW)yXy?9VN;A0vf8n9XW)H z=}YLfJUW|4=kVxUZ~~=r5x_hn`3QZwoQAS$M`Bz>Urk@bqw{%m0go;OjJe;67)~O2 zB1t6gp@)cYdJBC$E_vv3^gE0SvawkzY>Y@5MKd#JomfHRTiB4(#EuPce&}&P1r=ztG{>G-5 zS~^J_ydqMLYl?!I=?0u0m!qQB(d}|)lzBT{dnQeuGWBSc7>D~BoHA{s1Y>$eSY}o> zbYF`r`@ovqIWxSFYy@h43vI*9SW~~1U1+`BMu=1Rm7s9QrLK? z3YG=6ztm9QOAEEVOi;zE0V;QOL3OSHsJ68lDroJ5+E@>Y0w$686UvGP{evFn(M7^G zlio^iYw{O5QiJ9V!AIMP29PuUOR|ld=pC>r1oOUyzLj1<-%j5l82K6=T?}^4qf2w91iQoa!Y|XY@lQCum0FkjU;+FOM8FmhO+G#nCbIM| z?flP_IHVRRQ%gfcA?=|b1!H`SejKYluD2=F>iho7+POTsOqALa^pm21+=KKJcn2=G zdR>mC$&UWy+!?ur$tJ!03(<4#hMWPE>y_b@0pt+q7l@(l#5@QLUZyUh_t1Okee{0% zRW3$|5jF|I!WBHaibvosuH(@l_OK%*QJ=<90#_375&fPRI9&OE5;*udp+6G4z54%j ze@lNZ_ImCACY3;cEq1^8zdq=|R092j*z3^$zngkt`%C{!|4pQCqko})rGKM;r~jZ2 z(SOo^@#uOU-N2)*Jle*i?L4}XM>p~4=4}kYAclmR(xd2K7>0l!Xebav|_?AHBE0&a7TiBr*&$o=Ij>7%1t@K#flx-NU1M zd2}C7DtI!MCv#y-M9zkapD7K%KlH70G`l;&5yD@VHt%8s6zOiop&1Uq#mc2hDE-fqjHWkMiiTZ6LropucI1k||?Uj2iDH9|vLLTB)D&=nozp;z}H9Fy9l!{zakLkJW_)QNz?> zh*};!xtW3V!Bbp{Rqyb0OW!v!4kBuZS-{wtg*Mt%W6qAh(rX8-!4STtu&nw*CE_Z+LQemZL+MyyY)4`+X{3UUj zZe|gYzLoJZKBkB1W%`(YW`IY}^XLU0y~v}Nc=R%lUg6Q6t;}L(3A2|8(ZY`GMWR)V>q!GK64}xrMn^EU!K? zr{cCkVBO^K^bRt&NhR2iNh9=0>|t)?N}(T-gPja4mIvU^fPH8?RFU^E_cHep)jaxu zM;~&;efMXuXfkW^>qFBAm@5 zs@Vb-PVS;`{y@|Pyz&}^GUu_a?rzV(a1DPPO}dx#i{Hfg#3Le+t$?q1GLj>BlIBVI zt86h_0)5P2XR@=PpFDOhwTvw#e05L@xzp9_?yiAE8pHw(PVqEQ+=wT;hF>vpESqe= zb=-#|2;5gBPeN1(3h(#tY#FN({X0)a@FXj_V{ry5!MUBlOa4A%9CLM&Q(|` zMNb#(_gE|VJu>`1`n{lGvyCwDx$w5GYQo2pqcFRtaZq0$Hs!1X44o|iSwZjkH6W~; zZ4pxp{$(L3%nY8LLADipCY+Ht5puBy58DoPrcR*AAlre_PlQymoG#YuH(VA58zpHx zq;Ut?es+K-NAqO#h{i8rmj&uBv7KGPW%J}1{K^HsGDyvN_N>E5&%vZInADpbM0x=W z7YPR03)zc!GL9$X2iZ03#XLEdCldruBDpAkbPu(Wf?T%$i%kEbd;%nr6xOp>L$Jnf zU@vDkvYXf|*eltqcyb(1Ch}wwPmbrwWS&gn$q8H8Yhaf-f!z%MA7Z!gWGd_{L66h$ zf6{p}n@hnvhT$z2ybB0k5`=S9w(dU1qLH_|hz=CuPfa)W>+oJ9{NfdhO1MHZ(0An5 z_>E1PB|e<6ucaF*}(V~FHqMpm=j z0yy$3Dk%0ZX6$Y39YoY-_I93}xS8F-lanMDCgjiilzkXO67${cy`XIDJv=#iGYi|p zDO^fGG$QQ$*@xIiu_inW=NIHut`vS_ABW#~avGN+y#RxKirp;`vCjx!O~+IZ3%^c< z9Rj{{A$9o@`^pG^0GYw%N?+|~UmM}(b)L+`r)(k|-L!vJ#nsMN8fau8Y)Dv8^Y9RG zv&B4F0_!W*FX5G1V#~Eb>tu)`WK2-Y=#UtmoXJC>v=eAQCWZW=b- z%a#?wabWfe98u*J;fSgTlu+=0cnrgF~;=43^*|d&q>4RGY9<67uZvV7}Ag zO^q{%x$q{v-PEhpyVU2@xA4xqU*LUtf6)XjqiJ|Qo(kTC=cZd}51gfS!5i>;=sq~o zS`6>NTLWi2m%^LxE~l@6lbY-3A^Lip2B#mT-+|;4#U#Mn=@v4};LUS4LpXmwvkTrb z_cXj`?m1>3^D6T?ylL)T<^aSJW_B680q!w)`x|I8`y9Lh?oIXs_G@_e+xP5`Ar&E} zkcJRfNPCDkWFX{>kPAcBgj^D`E@XYkB3DtzULQfA}6?$RlC83)_ZwtLUbXVxhp?gF3hrS;AX6W0YpND=KdNA~x zFjbf-tUjzEtSQVM<_K#K>kR7-^M&<=4TN16_EOki;hEtx!{>yThO5Fg;T7Qx;jVB` zct?0wxHo)xI3K<${Os@x!Y>M66MjkfHQ{%J?+AY&{E6`0;jf0j75+~6d*L62e-i## z_!r?ngdd6skBExMj3|nj5iu)bPJ}U{KB6I_DZ(Dn9C3HVBN5L>?2XtT@mjzR3NNhek~pRW_=1luw=|&ynZJ3*<%e68TK|Z24TdQm&F~mm zzfb;v{2}=x^2g-6AcagpD_BLSB3u!vI8C8Yj8;S|Vioa<1Vy4^ zydp)Bs+g#lteC2puElND+Hz{sa+@aX1xJPln;vvPOid~AQ6uTAAD_&CU zQS4W|u6RrFuHt>gM~Y7sUnmYLzE%97_*wCr;*jF+C^CwU3W*Aj8Wp988WR;0H9l%; z)buEQR83S{ls9Tg6d$!J>dL4sQ8z?A8nrv>xu~zBeu?^R^!U+JMo$}EIl6kZWwdwn zlF_G+-Z1*w(VIu_9=&JuzR^F8{%Z^|CTYy%F;mA_$25(xk2!zLrDHA|^V*mLV?Kx; z6&)KLA8m-PjjoU8qc4cQDEfiuC!(KZ_G2WP-n2TdJ z##|BeWXy{(FUR~4b13Go*vYZkvAMCv*t*#Hv5RB5*fV2?VsDPUHTKEa7h_+J{VMjS z*k9tt$4!Zw7FQl;jH`}Y6354_in}ImYuxs@m*QTJdo%9WcoZ*-&xkLKFOIK?x5qo; zx%l(rFO1(FzaxHU{QmfN;}69DK2|oC9-A??aBT6|`D2}9-DA%lyJqYqWA7ikYwVL_ z-x~YT*iRCo6Os~=6Uq{*67&h)ge3{5C#*}jD&d-hrxRXI*pu)@!Vd{Qjf)r;JuY@! z&bS%lW{q==>l)`BciyYvB=NJP(4?rOF-fzMG)Wan?MZz}14-+Xu1UHs>BXeilHN%A zb38LXWc-xzIpg!jo5t6VZy0~k`1Rv2AOFz!r^Y`s{> zVf=)Y3FQ-v6RIaHp1@5wbHbJhw@kQg!q*dineba`ajG&^mD-iMD0NBd6{$n1*QY+6 z`f}=?)Pt!%r~aB2m6ni}n5ItCry0|HX-m_Vr46OsoOWy4D`{`0y`A>=#E^+$6Q@ti zpIA6?{zT_Q_r&cJcTC(l@$X3?lfoudO|nj^nKU@*rb)Lvf`VamoSuT42H<%6kdQ!}P!O>LjrH+5j@eN!Kw`ouJH zTKKfcY5Hk3)9R+JpLWf(>!!Us?bB(WPoF+Le|q8c?&*uCFP(nJ^!ukjIQ^&Tf29-Y zrRm!As`Rtd*Q8&P{%ZPr>F;Mu$e5myk-wyBvOdZBEPHx(es*E@qU@E~eD*!rk7hrf6P`0B zCnl#aXL-&UIlFWAQwz^5ys&U};k$*O7Jgnd zt4LE+QM9$__M#odVa211ql?>%`-%sO?=Rj}{A5XD$)u7gCH*BUN>-M2JM;Tl%31Sf>1J)5wRzUitRH3_n)TQ0 zd9y9EZL_z`zGe1pv;UmK%n6xeozpbOKIfJ>ch9+ZZrI$>bED@r&25?6HusUa&&++c zbZTjCX@2Rt(yL0ZDgCMRFD0RLDZ7+j<%`PKly8(xFUv10EIYsK(z46SJ}&#Z>|0fZ z%A_)@E>>++U7>na^`7c|b&j-Ge#2w?|Z4$)N3x)T&cNQ z^NQw8&D-Ts{5HD$lNbx$=$5x3sC+bZw?~srF3mS=xQtceL-#n?5gpUg5m8^RAe8)x7WL z{W0&)DpOT`RYTQHRXeNh)`jR4y3sn9u1n|B_2~w5XXrTHOS)HdZ|Z*6BYld#NUzpw z^yT_Wy-nY&ckA2q9r|v4kG@~e>(A1ktG__MT7QXtoqoN3P`^cggMPbVj3LF4YM5x4 zVz|I?xnYyxO2aiq!Wd~h&8RSrF+Oj6!}yl*9peF0kx6YTH&vRdOoOJ|O!t}|Fgy{7%9*G+GleyScI#7H< zudm)(eS7u&)w`-+u70EX?dtccKdAn=`s?cNs(-Bhx%#*2Kg==a+2$&9pLx0Y9P=gS ztIao&`7!e@^Hb($%pY39EOC}nc)+&S;R zqxD+rp!Is|HtTKH9oD<7_ge3_K5gA?ea`x#Eyp&;rmC+cg?Fc@6;Tq`LO1b znu9gp*8EWOQ_U~6(`q%f3u;?yeYJhHi)xqFF0VbK_QKjrYuDFqti7^!u=e`eZM8Sm z-ctK&9R<&Bm(Y4Rs6Z+;wer9d+GxzPhD#%j?dryR>do-Boqh)(zHe zue-VKwz?g4JL?{*d!p`zy8R6W4aE)024h1_LsLV0!{Ub18&))M4XYZ?X*j=OL&K(q zs~WCt7;Lz{VOztE4KFqP*qGE<*;w5;zp=Toqp`bjapM_{s~R^nZfxA#xTW!i#%+yv zG(OSzRO9Z(=Nn&Y+|#(f@%6^H8sBX^(0H)%o5t@Ne`q3_$R?_ZZE9~?+_bc5S<@L! z2bvBxebe+^(~k@63py8cFYqnsTd;q@2Ma!0@X3PD?VIhl+8?n$ZhzALjQu(Li}qLS z`|PjTKeK;n|JweY{RjI`_FwIP*#ETuy|8qlabe%Wix)n;@W8@Dj#x*UqsTGCG22n< zP&vvST8GYIbeJ7(N1LO=(e3DgBbddGrH}g)qd~Wjv&8wR)X2V`L5=Bo9}OasQJ<6UCmE5KhykH^N&u_ z8R<-QmOJM=-OgU;fOCm+nez-M=iKJJ%XzQ!0q4Wc$DF&I&p7ux-*&#|{J{CK^DE~! z&hMN*I)8ReaLsU;T@9`UE{DtM^0`*J&UBsaI?r{XYmIBI>oV7n>ju|$*UhfmTsvHM zx$bq{?|Ry`*Y&lVbSJrIxhviC-K}mPoa-%uTS?2^XS>gHU+7-#zQld0`%3p#_YU{d z?l;|^yAQR*wIsA8wWPG9wM=TMYjL!+wRE&}xAe61wJdKrx8;JC)h$=HY-!om@=VL8 zE#J0$-||z-U#+N>YK?3i+nU&#+&ZCkY3rG-8(Xh#y|eYf)=yi%YKv_vZPT|I+p62F zZB1PlraiVjzI{^r)b{D^ne934 zdF`{>mF?>Gigs;#O?yLoQ@g$0)!y3P-rm{1sC{MoMeS?b*R`*2zoPx>_UqaQ+jq7< z)c#`ohwXoM#C0TeBz7csq;|~e&~)fJ>N=KnoZE4J$3-0%cU;=Bwd2N)TRLv?-M+*;U!4 z?=p5(chz*&bv1M~b+vT$buH;Sy=!?F-?ggioUZe_)^=UfHPm%O*Y>VkyYA@P*>!i< zvt0+f<=u(h>D^h~x!ncb#oaTz=X5K(P2HAmTX${u{O-nXdv|lUtGlmzWA{DXFLrcX;pd-tT?L`-t~Z z?+e~N-u>R!z3+Grct7-h?ES*~i}!c$pFYAT^U=O2U$igIm*7kCCHpdb*}hy~fv?y% z!&l*(=hOR4K8w%hYxcQ)ZN3g)x6kKW;XA{((#QMO_}2O^^Ih({!grPLdf&~y+k88G zclqw|J>lE!d(QWQZ;x-k?{(jszJtD>dt^N!Jz+f&J&K+&J+VFUJ(GK~duI2P^{9Kw zd#ZX2J=Hyyo|YbO&)q#Q^}OEmR?oXV2YSBm`K9MiA*(`=r1&!=P5deSx99Kw2R2kH AvH$=8 literal 0 HcmV?d00001 diff --git a/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/UserInterfaceState.xcuserstate b/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cbb318f3b7a64e8ed507a04565458d13ed8bc122 GIT binary patch literal 16995 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 LiQoRu0?Ypa3p`Tu literal 0 HcmV?d00001 diff --git a/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/WorkspaceSettings.xcsettings b/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..659c876 --- /dev/null +++ b/Aircraft.xcodeproj/project.xcworkspace/xcuserdata/feesfu.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/Aircraft.xcscheme b/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/Aircraft.xcscheme new file mode 100644 index 0000000..f79f3d4 --- /dev/null +++ b/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/Aircraft.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/AircraftPlus.xcscheme b/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/AircraftPlus.xcscheme new file mode 100644 index 0000000..29aa479 --- /dev/null +++ b/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/AircraftPlus.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/xcschememanagement.plist b/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..33a10c4 --- /dev/null +++ b/Aircraft.xcodeproj/xcuserdata/Yufei.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + Aircraft.xcscheme + + orderHint + 0 + + AircraftPlus.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + 9F049CC016842BBA007F5AC2 + + primary + + + 9F049D2A1684367F007F5AC2 + + primary + + + + + diff --git a/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/Aircraft.xcscheme b/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/Aircraft.xcscheme new file mode 100644 index 0000000..f79f3d4 --- /dev/null +++ b/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/Aircraft.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/AircraftPlus.xcscheme b/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/AircraftPlus.xcscheme new file mode 100644 index 0000000..29aa479 --- /dev/null +++ b/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/AircraftPlus.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/xcschememanagement.plist b/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..33a10c4 --- /dev/null +++ b/Aircraft.xcodeproj/xcuserdata/feesfu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + Aircraft.xcscheme + + orderHint + 0 + + AircraftPlus.xcscheme + + orderHint + 1 + + + SuppressBuildableAutocreation + + 9F049CC016842BBA007F5AC2 + + primary + + + 9F049D2A1684367F007F5AC2 + + primary + + + + + diff --git a/Aircraft/.DS_Store b/Aircraft/.DS_Store index a499aa0f6bab64a652d25d0f740385c7cd89c8a7..e9c411fb4c58d4cbaf0b51815920c1c6c17751c9 100644 GIT binary patch delta 356 zcmZokXsM83U|?W$DortDU{C-uIe-{M3-C-V6q~50$SAonU^hRb5P-B1vz<= z%8LtcVt6j;R}s-$P* z5t3L_TUXxz)C2^Kj1ZcE7fQpZrp*fkRaqx@i%Da(#>m)EN5Rm{2w{z>3DlZClB}8B zAtuLD7F?8G vIWY<{1C;=Q1UHay1*zUx_?>w&ze*qnBg71b$?-f>Hy;r_!MIsW!(I>o3{n)e diff --git a/Aircraft/ADiagnostic.h b/Aircraft/ADiagnostic.h new file mode 100755 index 0000000..dcce4d0 --- /dev/null +++ b/Aircraft/ADiagnostic.h @@ -0,0 +1,66 @@ +// +// ADiagnostic.h +// +// +// Created by Yufei Lang on 6/28/12. +// Copyright (c) 2012 Yufei Lang. All rights reserved. +// + +#import + +@interface ADiagnostic : NSObject +{ +@private + NSString *_assertMessage; +} + +/*! + @discussion retrieves the singleton instance + */ ++ (ADiagnostic *)sharedInstance; + +/*! + @abstract log the message in the console. + @discussion Diaplay file name and line number is it is an error log. + */ ++ (void)logWithfileName:(const char *)fileName lineNumber:(int)lineNumber logType:(int)flag Message:(NSString *)message, ...; + +/*! + @discussion displays the alert message and asserts + */ +- (void)assertFromFile:(const char *)fileName atLineNumber:(int)lineNumber message:(NSString *)message, ...; + +@end + +#define LOG_FLAG_ERROR (1 << 0) // 0...0001 +#define LOG_FLAG_WARN (1 << 1) // 0...0010 +#define LOG_FLAG_INFO (1 << 2) // 0...0100 +#define LOG_FLAG_VERBOSE (1 << 3) // 0...1000 + +#if A_ASSERT_ENABLED +#define AAssert(condition, desc, ...) \ +do { \ +if (!(condition)) [[ADiagnostic sharedInstance] assertFromFile:__FILE__ atLineNumber:__LINE__ message:desc, ##__VA_ARGS__];\ +} while(0) +#else +#define AAssert(condition, desc, ...) +#endif + + +#if A_LOG_VERBOSE +#define LogVerbose(fmt, ...) \ +do {\ +[ADiagnostic logWithfileName:__FILE__ lineNumber:__LINE__ logType:LOG_FLAG_VERBOSE Message:fmt, ##__VA_ARGS__];\ +} while(0) +#else +#define LogVerbose(fmt, ...) +#endif + +#if A_LOG_ERROR +#define LogError(fmt, ...) \ +do { \ +[ADiagnostic logWithfileName:__FILE__ lineNumber:__LINE__ logType:LOG_FLAG_ERROR Message:fmt, ##__VA_ARGS__];\ +} while(0) +#else +#define LogError(fmt, ...) +#endif \ No newline at end of file diff --git a/Aircraft/ADiagnostic.m b/Aircraft/ADiagnostic.m new file mode 100755 index 0000000..70101a6 --- /dev/null +++ b/Aircraft/ADiagnostic.m @@ -0,0 +1,141 @@ +// +// ADiagnostic.m +// +// +// Created by Yufei Lang on 6/28/12. +// Copyright (c) 2012 Yufei Lang. All rights reserved. +// + +#import "ADiagnostic.h" + +@implementation ADiagnostic + ++ (ADiagnostic *)sharedInstance +{ + static ADiagnostic *diag; + if (nil == diag) + { + diag = [[ADiagnostic alloc] init]; + } + return diag; +} + ++ (void)logWithfileName:(const char *)fileName lineNumber:(int)lineNumber logType:(int)flag Message:(NSString *)message, ... +{ + va_list args; + va_start(args, message); + NSString *msg = [[NSString alloc] initWithFormat:message arguments:args]; + va_end(args); + + if (flag == LOG_FLAG_VERBOSE) + { + // for those verbose logs, do not show file name and line number. [Yufei Lang] + // NSLog(@"[Log verbose]: %@\n[File:%@][Line:%d]", msg, ExtractFileNameWithoutExtension(fileName, NO), lineNumber); + NSLog(@"[Log verbose]: %@", msg); + } + else if (flag == LOG_FLAG_ERROR) + { + NSLog(@"[Log error]: %@\n[File:%@][Line:%d]", msg, ExtractFileNameWithoutExtension(fileName, NO), lineNumber); + } + + [msg release]; +} + +- (void)assertFromFile:(const char *)fileName atLineNumber:(int)lineNumber message:(NSString *)message, ... +{ + va_list args; + va_start(args, message); + _assertMessage = [[[NSString alloc] initWithFormat:message arguments:args] autorelease]; + va_end(args); + + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Assertion happened" + message:[NSString stringWithFormat:@"Reason: %@\nWhere: %@\nAt line: %d", + _assertMessage, + ExtractFileNameWithoutExtension(fileName, NO), + lineNumber] + delegate:self + cancelButtonTitle:@"Abort app" + otherButtonTitles:nil]; + [alert show]; + [alert release]; +} + +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; +{ + NSAssert(NO, _assertMessage); + _assertMessage = nil; +} + +NSString *ExtractFileNameWithoutExtension(const char *filePath, BOOL copy) +{ + if (filePath == NULL) return nil; + + char *lastSlash = NULL; + char *lastDot = NULL; + + char *p = (char *)filePath; + + while (*p != '\0') + { + if (*p == '/') + lastSlash = p; + else if (*p == '.') + lastDot = p; + + p++; + } + + char *subStr; + NSUInteger subLen; + + if (lastSlash) + { + if (lastDot) + { + // lastSlash -> lastDot + subStr = lastSlash + 1; + subLen = lastDot - subStr; + } + else + { + // lastSlash -> endOfString + subStr = lastSlash + 1; + subLen = p - subStr; + } + } + else + { + if (lastDot) + { + // startOfString -> lastDot + subStr = (char *)filePath; + subLen = lastDot - subStr; + } + else + { + // startOfString -> endOfString + subStr = (char *)filePath; + subLen = p - subStr; + } + } + + if (copy) + { + return [[[NSString alloc] initWithBytes:subStr + length:subLen + encoding:NSUTF8StringEncoding] autorelease]; + } + else + { + // We can take advantage of the fact that __FILE__ is a string literal. + // Specifically, we don't need to waste time copying the string. + // We can just tell NSString to point to a range within the string literal. + + return [[[NSString alloc] initWithBytesNoCopy:subStr + length:subLen + encoding:NSUTF8StringEncoding + freeWhenDone:NO] autorelease]; + } +} + +@end \ No newline at end of file