{"id":413,"date":"2006-01-28T00:01:00","date_gmt":"2006-01-27T23:01:00","guid":{"rendered":"http:\/\/www.lubica.net\/bigwhale\/blog\/?p=413"},"modified":"2006-03-23T23:49:22","modified_gmt":"2006-03-23T22:49:22","slug":"optimize-me","status":"publish","type":"post","link":"https:\/\/lubica.net\/bigwhale\/blog\/optimize-me\/","title":{"rendered":"Optimize me!"},"content":{"rendered":"<p>Tole spodaj je implementacija operaterja + za class Coord. Coord je en preprost razred, ki zdru\u017euje tri integerje, ki predstavljajo koordinate v prostoru. X, Y in Z.<\/p>\n<p>Kaj po\u010dne operter +? Izvede premik v \u017eeljeno smer. Vseh mo\u017enih smeri je 26 (\u010de sem jaz prav pre\u0161tel). Vse smeri so zajete v enum vrednostih od 0, pa do 26 (tri ravnine, trenutna, zogrnja in spodnja, vsaka z osmimi mo\u017enimi smermi, plus pomik vertikalno, gor ali dol).<\/p>\n<p>Torej imam <em>my_place = Coord(10, 10, 10)<\/em> in rad bi se premaknil en sektor naprej, zato izvedem <em>my_place = my_place + Space::Dir_F;<\/em><\/p>\n<p>Operater plus mora to prestre\u010di in ugotoviti, da vse kar mu je za narediti je to, da pove\u010da vrednost spremenljivke, ki predstavlja pozicijo na Z (m_Z) osi, za ena.  Tako bo nova koordinata 10, 10, 11. \u010ce bi se rad premaknil za eno polje nazaj, desno spodaj, potem bom <em>my_place<\/em> pri\u0161tel <em>Space::Dir_BDR<\/em>. Operater bo sedaj najprej <em>m_Z<\/em> zmanj\u0161al za ena,  <em>m_X<\/em> bo pove\u010dal za ena in <em>m_Y<\/em> bo prav tako zmanj\u0161al za ena. In \u010de izhajam iz prej\u0161nje pozicije, bo nova koordinata sedaj, 11, 9, 10.<br \/>\nPo moji kurji pameti sem implementiral tale operater tako, da sem premike razdelil na tri osi in potem glede na to, kak je bil premik ustrezno pove\u010deval oziroma zmanj\u0161eval <em>m_X<\/em>, <em>m_Y<\/em> in <em>m_Z<\/em>. Pri zmanj\u0161evanju sem dodal \u0161e bremzo, da ne gre v negativo.<\/p>\n<p>Torej, sledi vpra\u0161anje, bi lahko tole premikanje \u0161e bolj optimiziral? Ga izvedel mogo\u010de kako druga\u010de?<\/p>\n<p>[cpp]<br \/>\nCoord &#038; Coord::operator+ (int dir)<br \/>\n{<br \/>\n  switch (dir)<br \/>\n  {<br \/>\n    case Space::Dir_None:<br \/>\n       break;<br \/>\n    case Space::Dir_F:<br \/>\n    case Space::Dir_FR:<br \/>\n    case Space::Dir_FL:<br \/>\n    case Space::Dir_FU:<br \/>\n    case Space::Dir_FUR:<br \/>\n    case Space::Dir_FUL:<br \/>\n    case Space::Dir_FD:<br \/>\n    case Space::Dir_FDR:<br \/>\n    case Space::Dir_FDL:<br \/>\n       m_Z++;<br \/>\n       break;<br \/>\n    case Space::Dir_BR:<br \/>\n    case Space::Dir_B:<br \/>\n    case Space::Dir_BL:<br \/>\n    case Space::Dir_BUR:<br \/>\n    case Space::Dir_BU:<br \/>\n    case Space::Dir_BUL:<br \/>\n    case Space::Dir_BDR:<br \/>\n    case Space::Dir_BD:<br \/>\n    case Space::Dir_BDL:<br \/>\n       if (m_Z > 0) m_Z&#8211;;<br \/>\n       break;<br \/>\n    default:<br \/>\n       break;<br \/>\n  }<br \/>\n  switch (dir)<br \/>\n  {<br \/>\n    case Space::Dir_None:<br \/>\n      break;<br \/>\n    case Space::Dir_FR:<br \/>\n    case Space::Dir_R:<br \/>\n    case Space::Dir_BR:<br \/>\n    case Space::Dir_FUR:<br \/>\n    case Space::Dir_UR:<br \/>\n    case Space::Dir_BUR:<br \/>\n    case Space::Dir_FDR:<br \/>\n    case Space::Dir_DR:<br \/>\n    case Space::Dir_BDR:<br \/>\n      m_X++;<br \/>\n      break;<br \/>\n    case Space::Dir_BL:<br \/>\n    case Space::Dir_L:<br \/>\n    case Space::Dir_FL:<br \/>\n    case Space::Dir_BUL:<br \/>\n    case Space::Dir_UL:<br \/>\n    case Space::Dir_FUL:<br \/>\n    case Space::Dir_BDL:<br \/>\n    case Space::Dir_DL:<br \/>\n    case Space::Dir_FDL:<br \/>\n      if (m_X > 0) m_X&#8211;;<br \/>\n      break;<br \/>\n    default:<br \/>\n      break;<br \/>\n}<\/p>\n<p>switch (dir)<br \/>\n{<br \/>\n    case Space::Dir_None:<br \/>\n      break;<br \/>\n    case Space::Dir_U:<br \/>\n    case Space::Dir_FU:<br \/>\n    case Space::Dir_FUR:<br \/>\n    case Space::Dir_UR:<br \/>\n    case Space::Dir_BUR:<br \/>\n    case Space::Dir_BU:<br \/>\n    case Space::Dir_BUL:<br \/>\n    case Space::Dir_UL:<br \/>\n    case Space::Dir_FUL:<br \/>\n      m_Y++;<br \/>\n      break;<br \/>\n    case Space::Dir_D:<br \/>\n    case Space::Dir_FD:<br \/>\n    case Space::Dir_FDR:<br \/>\n    case Space::Dir_DR:<br \/>\n    case Space::Dir_BDR:<br \/>\n    case Space::Dir_BD:<br \/>\n    case Space::Dir_BDL:<br \/>\n    case Space::Dir_DL:<br \/>\n    case Space::Dir_FDL:<br \/>\n      if (m_Y > 0) m_Y&#8211;;<br \/>\n      break;<br \/>\n      default:<br \/>\n      break;<br \/>\n  }<\/p>\n<p>  return *this;<br \/>\n}<br \/>\n[\/cpp]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tole spodaj je implementacija operaterja + za class Coord. Coord je en preprost razred, ki zdru\u017euje tri integerje, ki predstavljajo koordinate v prostoru. X, Y in Z. Kaj po\u010dne operter +? Izvede premik v \u017eeljeno smer. Vseh mo\u017enih smeri je 26 (\u010de sem jaz prav pre\u0161tel). Vse smeri so zajete v enum vrednostih od 0, pa do 26 (tri ravnine, trenutna, zogrnja in spodnja, vsaka z osmimi mo\u017enimi smermi, plus pomik vertikalno, gor ali dol). Torej imam my_place = Coord(10,&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/lubica.net\/bigwhale\/blog\/optimize-me\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-413","post","type-post","status-publish","format-standard","hentry","category-open-source"],"_links":{"self":[{"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/posts\/413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/comments?post=413"}],"version-history":[{"count":0,"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/posts\/413\/revisions"}],"wp:attachment":[{"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/media?parent=413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/categories?post=413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lubica.net\/bigwhale\/blog\/wp-json\/wp\/v2\/tags?post=413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}