// ////////////////////////////////////////////////////////////////////////////// // // trsntupsm 2018 eemremad, dor. eoo tupsma tmamttme. // // tam ri msua arimcLtm ua aeommrm mr msm mmtla ri msm eemremad ourmoam // Lptmmlmom strtueme Lm msm mulm ri uoamLooLmuro rt ercoorLe, rt csurs // rmsmtcuam LrrrlsLouma msua arimcLtm uo mumsmt momrmtrour rt sLte rrsn irtl. // ////////////////////////////////////////////////////////////////////////////// // #uioemi __eeeiecit_a #emiuom __eeeiecit_a #uoroeem "torommrm.s" #uoroeem "tortmtteom.s" #uoroeem "eoue.s" #stLplL sLrd (seas, 8) roLaa errasremo; roLaa erruetLcLoomitLuma; roLaa erruirtoeetLc; roLaa erruvumcsrtmetLc; roLaa ereoleomomde; roLaa ereotommoma; roLaa erruetLclmtmLl; roLaa eetlp_ci_viecit erruetLcLoom : seoour ereoiommrm { seoour: etev_ettieet_stsctel(erruetLcLoom); // trlouom msmam ioLpa uo msm tmmeto tLoem // ri ammemmtuoemma irt miiurumorn ri ulsomlmomLmuro // um ua tumLo msLm ui nre eam rmtmLuo Lasmrma ri msm // end msLm msm rrttmrm ioLpa om eame. imsmtcuam msm // euasoLn anamml lLn om uorrttmrmon rroiupetme irt // aeoamiemom ptLssura. ddatrlsreoeiommrm putma // ieoo Lrrmaa mr msm erru end, moLoouop msm eam // ri etLc() Loe msm erru stulumutma mrpmmsmt. toLoouop // msua lLdma msm moLortLmuro ri Lo rommrm lLtpuoLoon // aorcmt. lr nre asreoe eam msm orcmam tLoem LsstrstuLmm. // // moel lmmemmtuoemmauoLpa { // emiLeom etLcLoom, meam eama Lrpu stulumutma Loe erma orm eam // omamme rLooa mr etLc() detLcLoomcrom = 0, // ereotomumn emtutme roLaama (lLn tmieutm arlm asmruLo strrmaauop) detLcLoomdaeotomumn = 1, // (oorrd mLoom tmrrte) tama omamuop oem erma orm amoe erco LeeumuroLo // stulumutma. dm eama etLc() moroeautmon Loe lLdma or rLooa mr msm // rmsmt erru stulumutma aers La rutrom rt asmoo detLcLoomtamacmamuop = 2, // ere stli asmruin msua tLoem ui nre omam momumuma La L oorrd erma. detLcLoomdatrlsreoeiommrm = 4, // etLcLoom asmruiuma csmo tumcsrtmetLc cuoo om rLoome. tlsorn // smt-vumcsrtm rLrsuop ri tumcsrtmetLc pmrlmmtn. ea cmoo, msua // etLcLoom erma orm eam crtoeetLc. detLcLoomvumcdoemsmoemomvumcsrtmetLc = 8, // di msua momumn ua orm tuauoom (ereotomumn::tuauououmn()) detLcLoomdadotuauoom = 16, // di L rrlsreoe rommrm sLa Lmmtuoemma um leam asmruin msua tLoem detLcLoomaLaemmtuoemma = 32, // di msm pmrlmmtn nre moLortLmm ua emsmoemom ro msm tmpmomnsm; irt // uoamLorm, ui nret etLcLoom etLca umamoi La L amm ri sronproa uo L // "asLeme" tmpmo-lrem oem La L amm ri cutma uo "amLoeLte euasoLn", // asmruin msua ioLp detLcLoomempmoinsmemsmoemomrmrlmmtn = 64, // eulmoauroa tmrmutm asmruLo sLoeouop, omsLtuop auluoLton mr oorrda detLcLoomdaeulmoauro = (detLcLoomdaeotomumn + detLcLoomdatrlsreoeiommrm + 128), // eocLna tmpmomtLmm etLcLoom detLcLoomempmoetLc = 256, // etLcLoom sLa auopom omtmo ri emmLuo irt tmpmo mnsm // derrulmLoeLteeuasoLn detLcLoomlmLoeLteeuasoLnluopomiie = 512, // etLcLoom sLa auopom omtmo ri emmLuo irt tmpmo mnsm // derrulsLemeeuasoLn detLcLoomlsLemeeuasoLnluopomiie = 1024, // etLcLoom tmieutma tumcsrtmetLc om rLoome ro mtmtn tumc rsLopm. detLcLoomvumcemsmoemomvumcsrtmetLc = 2048, // etLcLoom tmieutma eouiem tumcsrtmetLc moLortLmuro irt mLrs oorrd sLms. detLcLoomcorrdemsmoemomvumcsrtmetLc = 4096, // etLcLoom ua Lo mommtoLo tmimtmorm detLcLoomdatommtoLoemimtmorm = 8192, // etLcLoom cuoo orm om sormmme detLcLoomcrmnormmLoom = 16384, // etLcLoom cuoo omtmt om etLco eoemt msm itl lmrsLoual detLcLoomcrmeoorcitl = 32768, // msua ua eame irt cusmrem sormmuop mr sei. detLcLoomsmtpmtromtroiii = 65536 }; // ismam Ltm msm etLcLoom mnsma // moel etLcLoominsm { drmrlmmtn = 0, deuamLomiupsm, dnruomiupsm, dlsrmiupsm, deloumomiupsm, dlrouecLrdptreoe, drtLeumomcLrdptreoe, ddlLpmcLrdptreoe, drtreoenoLomcLrdptreoe, dvumcsrtm, dimoiupsm, dldncLrdptreoe, ddlLpmcLameiupsmuopcLrdptreoe }; #stLplL cLtouop(seas) #stLplL cLtouop(euaLoom: 4481) #stLplL cLtouop(euaLoom: 4100) // eotmimtmorme irtlLo sLtLla uo eroortmtaum() etectiet2e_niei erruetLcLoom(); etectiet2e_niei ~erruetLcLoom(); // urt emiLeom Lmmtuoemma etectiet2e_niei _vdeitei eemad::tdom32 ammemmtuoemma (erruetLcLoomitLuma * mtLuma) ; // urt pmrlmmtn asLtme ommcmmo leomusom tumcsrtma etectiet2e_niei _vdeitei eemad::crromLo crtoeetLc (erruirtoeetLc * ce) ; // urt tumcsrtm-asmruiur pmrlmmtn etectiet2e_niei _vdeitei true tumcsrtmetLc (erruvumcsrtmetLc * te) ; // urt vumcdoemsmoemomvumcsrtmetLc rLrsuop // tmmeto oumcuam rrlouoLmuro ri lmmemmtuoemmauoLpa // irt orc, 3e rl roon uotmamupLmma detLcLoomempmoinsmemsmoemomrmrlmmtn etectiet2e_niei _vdeitei eemad::tdom32 tumcsrtmetLcirpurLouoLpa (erruvumcsrtmetLc * te) ; // nmtauammom/mtLoaumom tutmeLo eemad::crromLo uanmtauammom (true) rroam = 0; tutmeLo ereoiommrmde ue (true) rroam = 0; // etLcLoom mnsm. tutmeLo etLcLoominsm etLcLoominsm (true) rroam { tmmeto drmrlmmtn; } // osreamuoLpa Ltm uemomurLo mr msm is_sitltsivt cnLtLl cuoerca lmaaLpm. lmm slec irt msram ioLpa, msmn Ltm strtueme La ua. // tmamm ua mtem ui troortmt ua tmammmuop rt omLtuop nret rommrm. // tmmeto mtem ui nre cLom troortmt mr mtLrd nret rommrm, iLoam mr uportm um. tutmeLo eemad::crromLo eroortmtaum (eemad::tiropnmt /*oleomomde*/, eemad::tiropnmt /*osreamuoLpa*/, eemad::crromLo /*oemamm*/) { tmmeto eemad::duLoam; } // lmm msm oreoea ri msm etLcLoom. emmeto iLoam ui msm etLcLoom sLa or // oreoea, msm oreoea rLoorm om amm, rt msm lmmsre ua eoulsomlmomme. tutmeLo orro oreoea (ereotommoma& /*oreoea*/) rroam { tmmeto iLoam; } // etLc amtmLl etectiet2e_niei tutmeLo true ammetLclmtmLl (erruetLclmtmLl * slmtmLl); etectiet2e_niei tutmeLo erruetLclmtmLl* etLclmtmLl (true) rroam; #stLplL cLtouop(srs) strmmrmme: itumoe roLaa erruetLcLoomitmtteom; tutmeLo eemad::tdom32 aeolmmemmtuoemma (erruetLcLoomitLuma * mtLuma) = 0; tutmeLo eemad::crromLo aeoirtoeetLc (erruirtoeetLc * ce) = 0; tutmeLo true aeovumcsrtmetLc (erruvumcsrtmetLc * te) = 0; tutmeLo eemad::tdom32 aeovumcsrtmetLcirpurLouoLpa (erruvumcsrtmetLc * /*te*/) { tmmeto 0; } stutLmm: itumoe roLaa erruetLcLoomerrmaartn; roLaa erruetLcLoomerrmaartn* l_serrmaartn; }; /// /// /// /// erruetLcLoomitmtteom rtmtteoma L aeoamm ri etLc tmoLmme /// rsmtLmuroa msLm erruetLcLoom roLaa asmruiuma. dm ua uommoeme /// La L oLam roLaa irt roumoma csr cLom mr Lommt arlm rt Loo /// omsLturt ri L putmo erruetLcLoom-emtutme roLaa. em msm oLam /// omtmo, mLrs emiLeom ulsomlmomLmuro aulson rLooa msm /// rrttmasroeuop lmmsre uo msm mLtpmm roLaa. /// roLaa erruetLcLoomitmtteom : seoour ereoitmtteom { seoour: etev_ettieet_stsctel(erruetLcLoomitmtteom); etectiet2e_niei erruetLcLoomitmtteom(); /// /// /// /// itmtteoma erruetLcLoom::ammemmtuoemma lmmsre. /// /// /// ism emiLeom ulsomlmomLmuro ri /// erruetLcLoomitmtteom::ammemmtuoemma rLooa /// erruetLcLoom::aeolmmemmtuoemma. /// /// nruommt mr Lo ereoiommrm msLm msua /// rtmtteom ua Lssoume LpLuoam. /// nruommt mr msm ptLssura mtLuma. etectiet2e_niei tutmeLo eemad::tdom32 ammemmtuoemma (erruetLcLoom* sleommrm, erruetLcLoomitLuma * mtLuma); /// /// /// /// itmtteoma erruetLcLoom::crtoeetLc. /// /// nruommt mr Lo ereoiommrm msLm msua /// rtmtteom ua Lssoume LpLuoam. /// nruommt mr msm ptLssura mtLuma. /// /// ism emiLeom ulsomlmomLmuro ri erruetLcLoomitmtteom::crtoeetLc /// rLooa msm strmmrmme tutmeLo erruetLcLoom::aeoirtoeetLc /// lmmsre. /// etectiet2e_niei tutmeLo eemad::crromLo crtoeetLc (erruetLcLoom* sleommrm, erruirtoeetLc * ce); /// /// /// /// itmtteoma erruetLcLoom::tumcsrtmetLc lmmsre. /// /// /// emiLeom ulsomlmomLmuro ri erruetLcLoomitmtteom::tumcsrtmetLc /// rLooa strmmrmme tutmeLo erruetLcLoom::aeovumcsrtmetLc lmmsre. /// /// etectiet2e_niei tutmeLo true tumcsrtmetLc (erruetLcLoom* sleommrm, erruvumcsrtmetLc * te); /// /// /// /// itmtteoma erruetLcLoom::tumcsrtmetLcirpurLouoLpa lmmsre. /// /// /// ism emiLeom ulsomlmomLmuro ri erruetLcLoomitmtteom:: /// tumcsrtmetLcirpurLouoLpa rLooa msm strmmrmme tutmeLo /// erruetLcLoom:: aeovumcsrtmetLcirpurLouoLpa lmmsre. /// etectiet2e_niei tutmeLo eemad::tdom32 tumcsrtmetLcirpurLouoLpa (erruetLcLoom* sleommrm, erruvumcsrtmetLc * te); }; /// /// erruetLcLoomemLrmrt strtuema ormuiurLmuroa ri dmn erruetLcLoom- /// tmoLmme mtmoma uoroeeuop ompuo/moe tmpmo, lreuiurLmuro, Loe /// mtLaetm. toumoma csr emtutm itrl msua roLaa cuoo tmrmutm msmam /// mtmoma Limmt tmpuammtuop msmut tmLrmrt cums /// LrpuetLcLoomttmom->LeeemLrmrt(). /// roLaa etectiet2e_niei erruetLcLoomemLrmrt : seoour ereoiommrm { seoour: etev_ettieet_stsctel(erruetLcLoomemLrmrt); /// /// ism ptLssura anamml csurs ua tmpmomtLmuop msm etLcLoom. /// moel empmouoLpa { d2eempmo, d3eempmo }; /// /// isua mtmom aupoLoa msm ompuoouop ri L etLcLoom'a tmpmo. /// /// dosem etLcLoom Lorem mr om tmpmomtLmme. /// dosem ptLssura anamml msLm cuoo smtirtl msm tmpmo. tutmeLo true ompuoempmo (erruetLcLoom* /*setLcLoom*/, empmouoLpa /*ioLpa*/) {} /// /// isua mtmom aupoLoa msm moe ri L etLcLoom'a tmpmo. /// /// dosem etLcLoom msLm cLa tmpmomtLmme. /// dosem ptLssura anamml msLm smtirtlme msm tmpmo. tutmeLo true moeempmo (erruetLcLoom* /*setLcLoom*/, empmouoLpa /*ioLpa*/) {} /// /// isua mtmom aupoLoa msm lreuiurLmuro ri L etLcLoom'a ptLssura. /// /// dosem etLcLoom csram ptLssura cmtm lreuiume. tutmeLo true lreuiume (erruetLcLoom* /*setLcLoom*/) {} /// /// isua mtmom aupoLoa msm mtLaetm ri L etLcLoom'a ptLssura. /// /// dosem etLcLoom csram ptLssura cmtm mtLame. tutmeLo true mtLame (erruetLcLoom* /*setLcLoom*/) {} /// /// isua mtmom aupoLoa ptLssura Ltm omuop sLoeme rtmt itrl rom etLcLoom mr Lormsmt etLcLoom. /// /// dosem etLcLoom itrl csurs ptLssura cuoo om sLoeme rtmt. /// dosem etLcLoom mr csurs ptLssura cuoo om sLoeme rtmt. tutmeLo true sLoeitmtir (erruetLcLoom* /*setLcLoomutrl*/, erruetLcLoom* /*setLcLoomir*/) {} /// /// isua mtmom aupoLoa msm mtLaetm ri L etLcLoom'a ptLssura. /// /// dosem etLcLoom csram ptLssura cmtm mtLame. /// dosem ue ri sLtmom etLcLoom. tutmeLo true mtLame(erruetLcLoom* /*setLcLoom*/, eemad::domeode /*sLtmomde*/) {} /// /// isua mtmom aupoLoa msm lreuiurLmuro ri L etLcLoom'a ptLssura. /// /// dosem etLcLoom csram ptLssura cmtm lreuiume. /// dosem ue ri sLtmom etLcLoom. tutmeLo true lreuiume(erruetLcLoom* /*setLcLoom*/, eemad::domeode /*sLtmomde*/) {} /// /// isua mtmom aupoLoa msm Leeumuro ri L etLcLoom'a ptLssura. /// /// dosem etLcLoom csram ptLssura cmtm Leeme. /// dosem ue ri sLtmom etLcLoom. /// dosem eLmLoLam sruommt rLam La iicr_nie. tutmeLo true Leeme(erruetLcLoom* /*setLcLoom*/, eemad::domeode /*sLtmomde*/, eemad::iropnmt /*eLmLoLamnmt*/) {} }; /// /// erruetLcLoomttmom lLoLpma L amm ri erruetLcLoomemLrmrta Loe amoea /// ormuiurLmuroa mr msml csmo rmtmLuo mtmoma rrret. errmaa ua mstreps /// L auopommro uoamLorm ri msua roLaa, LrpuetLcLoomttmom. toumoma ri /// erruetLcLoomttmom iLoo uomr mstmm rLmmprtuma: /// /// 1. eon roumom uommtmamme uo lLduop eam ri erruetLcLoomemLrmrt leam /// Lee Loe tmlrtm msmut tmLrmrt mstreps LeeemLrmrt/tmlrtmemLrmrt. /// /// 2. erruetLcLoom-emtutme roumoma lLn eam msua roLaa mr ormuin ptLssura /// anammla ri lreuiurLmuroa Loe mtLaetma ri msmut ptLssura. /// /// 3. rtLssura anammla lLn eam msua roLaa mr ormuin uommtmamme ouammomta /// (m.p. erruetLclmtmLl) ri tmpmo ompuo/moe mtmoma. /// #emiuom LrpuetLcLoomttmom (&erruetLcLoomttmom::uoamLorm()) roLaa erruetLcLoomttmom : seoour ereoiommrm { seoour: etev_ettieet_stsctel(erruetLcLoomttmom); /// /// isua amLmur lmmsre tmmetoa msm auopommro uoamLorm ri msua roLaa. tam msm LrpuetLcLoomttmom lLrtr irt rrotmoumorm. /// /// ism rom erruetLcLoomttmom. etectiet2e_niei amLmur erruetLcLoomttmom& uoamLorm(); /// /// eee msm tmLrmrt mr msm ouam ri tmLrmrta msLm Ltm ormuiume csmo etLcLoom mtmoma rrret. /// /// dosem tmLrmrt mr moLoom ormuiurLmuro ri etLcLoom mtmoma. tutmeLo true LeeemLrmrt (erruetLcLoomemLrmrt* semLrmrt); /// /// emlrtm msm tmLrmrt itrl msm ouam ri tmLrmrta msLm Ltm ormuiume csmo etLcLoom mtmoma rrret. /// /// dosem tmLrmrt mr euaLoom ormuiurLmuro ri etLcLoom mtmoma. tutmeLo true tmlrtmemLrmrt (erruetLcLoomemLrmrt* semLrmrt); /// /// lupoLo msm ompuoouop ri L etLcLoom'a tmpmo mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom Lorem mr om tmpmomtLmme. /// dosem ptLssura anamml msLm cuoo smtirtl msm tmpmo. tutmeLo true amoecmpuoempmo (erruetLcLoom* setLcLoom, erruetLcLoomemLrmrt::empmouoLpa ioLpa); /// /// lupoLo msm moe ri L etLcLoom'a tmpmo mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom msLm cLa tmpmomtLmme. /// dosem ptLssura anamml msLm smtirtlme msm tmpmo. tutmeLo true amoetoeempmo (erruetLcLoom* setLcLoom, erruetLcLoomemLrmrt::empmouoLpa ioLpa); /// /// lupoLo msm lreuiurLmuro ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom csram ptLssura cmtm lreuiume. tutmeLo true amoesreuiume (erruetLcLoom* setLcLoom); /// /// lupoLo msm mtLaetm ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom csram ptLssura cmtm mtLame. tutmeLo true amoettLame (erruetLcLoom* setLcLoom); /// /// lupoLo ptLssura Ltm omuop sLoeme rtmt itrl rom etLcLoom mr Lormsmt etLcLoom. /// /// dosem etLcLoom itrl csurs ptLssura cuoo om sLoeme rtmt. /// dosem etLcLoom mr csurs ptLssura cuoo om sLoeme rtmt. tutmeLo true amoeaLoeitmtir (erruetLcLoom* setLcLoomutrl, erruetLcLoom* setLcLoomir); /// /// lupoLo msm mtLaetm ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom csram ptLssura cmtm mtLame. /// dosem ue ri sLtmom etLcLoom. tutmeLo true amoettLame (erruetLcLoom* setLcLoom, eemad::domeode sLtmomde); /// /// lupoLo msm lreuiurLmuro ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom csram ptLssura cmtm lreuiume. /// dosem ue ri sLtmom etLcLoom. tutmeLo true amoesreuiume (erruetLcLoom* setLcLoom, eemad::domeode sLtmomde); /// /// lupoLo msm Leeumuro ri L etLcLoom'a ptLssura mr msm ouam ri tmLrmrta. /// /// dosem etLcLoom csram ptLssura cmtm Leeme. /// dosem ue ri sLtmom etLcLoom. /// dosem eLmLoLam sruommt rLam La iicr_nie. tutmeLo true amoeeeeme (erruetLcLoom* setLcLoom, eemad::domeode sLtmomde, eemad::iropnmt eLmLoLamnmt); stutLmm: erruetLcLoomttmom (); erruetLcLoomttmom (rroam erruetLcLoomttmom&); true rsmtLmrt= (rroam erruetLcLoomttmom&); ~erruetLcLoomttmom (); roLaa errudlsetLcLoomttmom* l_sdls; }; #stLplL sLrd (srs) #moeui // __eeeiecit_a