Whirl code before optimizations

#include "EasyCE.h" unsigned short* buffer; #define MAX_INDEX 20 class CWhirlField { public: CWhirlField() { m_pData = new byte[240*320]; m_pData2 = new byte[240*320]; } ~CWhirlField() { delete m_pData; delete m_pData2; } void Draw(unsigned short* pBuffer) { for (int x=0; x<240; x++) { for (int y=0; y<320; y++) { pBuffer[x+y*240] = BuildColor(m_pData[x+240*y]); } } } void NextStep() { for (int x=0; x<240; x++) { for (int y=0; y<320; y++) { byte nOriginal = m_pData[x+y*240]; m_pData2[x+240*y] = nOriginal; for (int dx=-1; dx<=1; dx++) { for (int dy=-1; dy<=1; dy++) { if ( (x>=0) && (x<240) && (y>=0) && (y<320) ) { byte nNeigh = m_pData[x+dx+240*(y+dy)]; if ((1+nNeigh)%MAX_INDEX == nOriginal) { m_pData2[x+y*240] = nNeigh; } } } } } } Copy2To1(); } void Copy2To1() { for (int x=0; x<240; x++) { for (int y=0; y<320; y++) { m_pData[x+240*y] = m_pData2[x+240*y]; } } } void SetRandom() { for (int x=0; x<240; x++) { for (int y=0; y<320; y++) { m_pData[x+y*240] = (byte)((double)(rand())*MAX_INDEX/RAND_MAX); } } } static unsigned short BuildColor(byte R, byte G, byte B) { return ((R>>3)<<11) + ((G>>2)<<5) + (B>>3); } static unsigned short BuildColor(byte n) { int N = n*255.0/MAX_INDEX; return BuildColor(N, N%16, (255-N)%64); } protected: byte *m_pData; byte *m_pData2; }; void PutPixel(int x, int y, byte R, byte G, byte B) { unsigned short c = ((R>>3)<<11) + ((G>>2)<<5) + (B>>3); buffer[x+y*240] = c; } void main() { buffer = (unsigned short*)getbuffer(); while (clicked()) { update(); }; CWhirlField wf; wf.SetRandom(); wf.Draw(buffer); while (!clicked()) { update(); }; for (int i=0; i<1000; i++) { wf.NextStep(); wf.Draw(buffer); update(); } }