Guest User

famitracker_cleanup_duplicate_patterns

a guest
Nov 30th, 2012
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1.     for (unsigned int i = 0; i <= m_iTracks; ++i)
  2.     for (unsigned int c = 0; c < m_iChannelsAvailable; ++c)
  3.     {
  4.         TRACE2("Trim: %d, %d\n", i, c);
  5.  
  6.         unsigned int uiPatternUsed[MAX_PATTERN];
  7.  
  8.         // mark all as unused
  9.         for (unsigned int ui=0; ui < MAX_PATTERN; ++ui)
  10.         {
  11.             uiPatternUsed[ui] = MAX_PATTERN;
  12.         }
  13.  
  14.         // map used patterns to themselves
  15.         for (unsigned int f=0; f < m_pTunes[i]->GetFrameCount(); ++f)
  16.         {
  17.             unsigned int uiPattern = m_pTunes[i]->GetFramePattern(f,c);
  18.             uiPatternUsed[uiPattern] = uiPattern;
  19.         }
  20.  
  21.         // remap duplicates
  22.         for (unsigned int ui=0; ui < MAX_PATTERN; ++ui)
  23.         {
  24.             if (uiPatternUsed[ui] == MAX_PATTERN) continue;
  25.             for (unsigned int uj=0; uj < ui; ++uj)
  26.             {
  27.                 unsigned int uiLen = m_pTunes[i]->GetPatternLength();
  28.                 bool bSame = true;
  29.                 for (unsigned int uk = 0; uk < uiLen; ++uk)
  30.                 {
  31.                     stChanNote* a = m_pTunes[i]->GetPatternData(c, ui, uk);
  32.                     stChanNote* b = m_pTunes[i]->GetPatternData(c, uj, uk);
  33.                     if (0 != ::memcmp(a, b, sizeof(stChanNote)))
  34.                     {
  35.                         bSame = false;
  36.                         break;
  37.                     }
  38.                 }
  39.                 if (bSame)
  40.                 {
  41.                     uiPatternUsed[ui] = uj;
  42.                     TRACE2("Duplicate: %d = %d\n", ui, uj);
  43.                     break;
  44.                 }
  45.             }
  46.         }
  47.  
  48.         // apply mapping
  49.         for (unsigned int f=0; f < m_pTunes[i]->GetFrameCount(); ++f)
  50.         {
  51.             unsigned int uiPattern = m_pTunes[i]->GetFramePattern(f,c);
  52.             m_pTunes[i]->SetFramePattern(f,c,uiPatternUsed[uiPattern]);
  53.         }
  54.     }
Advertisement
Add Comment
Please, Sign In to add comment