From: <wel...@us...> - 2010-11-05 12:55:38
|
Revision: 6341 http://planeshift.svn.sourceforge.net/planeshift/?rev=6341&view=rev Author: weltall2 Date: 2010-11-05 12:55:31 +0000 (Fri, 05 Nov 2010) Log Message: ----------- optimizations to psmoney patch by mikesflowers Modified Paths: -------------- trunk/src/common/rpgrules/psmoney.cpp trunk/src/common/rpgrules/psmoney.h Modified: trunk/src/common/rpgrules/psmoney.cpp =================================================================== --- trunk/src/common/rpgrules/psmoney.cpp 2010-11-03 13:28:48 UTC (rev 6340) +++ trunk/src/common/rpgrules/psmoney.cpp 2010-11-05 12:55:31 UTC (rev 6341) @@ -19,6 +19,8 @@ * */ +#include <cssysdef.h> +#include <csgeom/math.h> #include <psconfig.h> #include "psmoney.h" @@ -100,63 +102,49 @@ if(!trias && !hexas && !octas && !circles) return csString("0 Trias"); - csString c,o,h,t; + csString strs[4]; + int found = 0; - if (circles) - c.Format("%d Circles",circles); - if (octas) - o.Format("%d Octas",octas); - if (hexas) - h.Format("%d Hexas",hexas); - if (trias) - t.Format("%d Trias",trias); - - csString temp; - if (c.Length()) - temp.Append(c); - - if (temp.Length() && o.Length() && !h.Length() && !t.Length()) + if(circles) { - temp.Append(" and "); - temp.Append(o); - return temp; + strs[0] = circles; + strs[0].Append(" Circles"); + found = 1; } - if (temp.Length() && o.Length()) + if(octas) { - temp.Append(", "); - temp.Append(o); + strs[found] = octas; + strs[found].Append(" Octas"); + found++; } - else if (o.Length()) - temp = o; - - if (temp.Length() && h.Length() && !t.Length()) + if(hexas) { - temp.Append(" and "); - temp.Append(h); - return temp; + strs[found] = hexas; + strs[found].Append(" Hexas"); + found++; } - if (temp.Length() && h.Length()) + if(trias) { - temp.Append(", "); - temp.Append(h); + strs[found] = trias; + strs[found].Append(" Trias"); + found++; } - else if (h.Length()) - temp = h; - - if (temp.Length() && t.Length()) + + csString temp((size_t)found * 11); + temp = strs[0]; + if(found > 1) // Only add "and" if there's at least two entries { + const int fMinus1 = found - 1; + int i = 1; + for(; i < fMinus1; i++) // Loop either one or two times to add in commas + { + temp.Append(", "); + temp.Append(strs[i]); + } temp.Append(" and "); - temp.Append(t); - return temp; + temp.Append(strs[i]); } - else if (t.Length()) - { - return t; - } - else - { - return temp; - } + return temp; } void psMoney::Adjust( int type, int value ) @@ -277,7 +265,7 @@ return true; } -int psMoney::Get( int type ) +int psMoney::Get( int type ) const { switch( type ) { @@ -326,16 +314,14 @@ { psMoney left,taken; left = *this; - + int type = MONEY_TRIAS; - while (taken.GetTotal() < other.GetTotal() && type <= MONEY_CIRCLES) + while(taken.GetTotal() < other.GetTotal() && type <= MONEY_CIRCLES) { - while (left.Get(type) && taken.GetTotal() < other.GetTotal()) - { - taken.Adjust(type,1); - left.Adjust(type,-1); - } - type++; + const int amount = csMin( left.Get(type), other.GetTotal() - taken.GetTotal() ); + taken.Adjust(type, amount); + left.Adjust(type, -amount); + type++; } // Now we might have taken a little to much so calculate and give Modified: trunk/src/common/rpgrules/psmoney.h =================================================================== --- trunk/src/common/rpgrules/psmoney.h 2010-11-03 13:28:48 UTC (rev 6340) +++ trunk/src/common/rpgrules/psmoney.h 2010-11-05 12:55:31 UTC (rev 6341) @@ -124,7 +124,7 @@ psMoney operator * (const int mult) const; void Adjust( int type, int value ); - int Get( int type ); + int Get( int type ) const; bool EnsureTrias(int minValue); bool EnsureHexas(int minValue); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |