1 /* 2 * This file is licensed under the GNU General Public License, version 3 3 * http://www.gnu.org/licenses/gpl-3.0.html 4 * 5 * Author: Darius Markauskas 6 * 7 */ 8 9 #include "jumptracker.h" 10 JumpTracker()11JumpTracker::JumpTracker() 12 { 13 m_HomeIsStart = true; 14 } 15 ~JumpTracker()16JumpTracker::~JumpTracker() 17 { 18 } 19 TakeJump(LineAddress & jumpStart,LineAddress & jumpFinish)20void JumpTracker::TakeJump(LineAddress& jumpStart, LineAddress& jumpFinish) 21 { 22 if (jumpStart.IsSameAs(jumpFinish) && jumpStart.IsSameAs(m_JumpHome)) 23 { 24 //do nothing 25 } 26 else if (jumpStart.IsSameAs(jumpFinish) && !m_JumpHome.GetFilename().IsEmpty()) 27 { 28 if (m_JumpHome.IsFinish()) 29 m_JumpBack.push_front(m_JumpHome); 30 m_JumpHome = jumpFinish; 31 } 32 else if ( m_JumpHome.IsSameAs(jumpStart) && !m_JumpForward.empty() && jumpFinish.IsSameAs(m_JumpForward.front()) ) 33 { 34 m_JumpBack.push_front(m_JumpHome); 35 m_JumpHome = m_JumpForward.front(); 36 m_JumpForward.pop_front(); 37 } 38 else if (m_JumpHome.IsSameAs(jumpFinish) && !m_JumpBack.empty() && m_JumpBack.front().IsSameAs(jumpStart)) 39 { 40 // jump was repeated. Do nothing. 41 } 42 else 43 { 44 if (!m_JumpHome.GetFilename().IsEmpty() && m_JumpHome.IsFinish() && !m_JumpHome.IsSameAs(jumpStart)) 45 { 46 m_JumpBack.push_front(m_JumpHome); 47 } 48 m_JumpBack.push_front(jumpStart); 49 m_JumpHome = jumpFinish; 50 m_JumpForward.clear(); 51 } 52 while (m_JumpBack.size() > 50) 53 { 54 m_JumpBack.pop_back(); 55 } 56 } 57 IsJumpBackEmpty()58bool JumpTracker::IsJumpBackEmpty() 59 { 60 return m_JumpBack.empty(); 61 } 62 IsJumpHomeEmpty()63bool JumpTracker::IsJumpHomeEmpty() 64 { 65 return m_JumpHome.GetFilename().IsEmpty(); 66 } 67 IsJumpForwardEmpty()68bool JumpTracker::IsJumpForwardEmpty() 69 { 70 return m_JumpForward.empty(); 71 } 72 MakeJumpBack()73void JumpTracker::MakeJumpBack() 74 { 75 if (!IsJumpBackEmpty()) 76 { 77 m_JumpForward.push_front(m_JumpHome); 78 m_JumpHome = m_JumpBack.front(); 79 m_JumpBack.pop_front(); 80 } 81 } 82 MakeJumpForward()83void JumpTracker::MakeJumpForward() 84 { 85 if (!IsJumpForwardEmpty()) 86 { 87 m_JumpBack.push_front(m_JumpHome); 88 m_JumpHome = m_JumpForward.front(); 89 m_JumpForward.pop_front(); 90 } 91 } 92 GetHomeAddress()93const LineAddress& JumpTracker::GetHomeAddress() 94 { 95 return m_JumpHome; 96 } 97