Author: Mathieu Pagé
Date: 11:47:09 01/05/06
Go up one level in this thread
On January 05, 2006 at 14:13:07, Dann Corbit wrote:
>On January 05, 2006 at 13:04:29, Mathieu Pagé wrote:
>
>>Hi, I want to push OO to it's limit in order to get cleaner code. Here is what I
>>want to do :
>>
>>
>>class CSquare
>> {
>> private:
>> unsigned int m_uiSquareIndex;
>> public :
>> // the next 3 functions allow CSquare to be used as an unsigned int in
>> // arithmetic operations.
>> inline CSquare(unsigned int);
>> inline CSquare operator=(unsigned int);
>> inline operator unsigned int();
>>
>> // The next 2 functions are why i'd like to use OOP to make the
>>manipulation
>> // of squares clearer.
>> unsigned int GetColumn()
>> {
>> return m_uiSquareIndex % 8;
>> };
>>
>> unsigned int GetRow()
>> {
>> return m_uiSquareIndex / 8;
>> };
>> };
>>
>>
>>This way I can use CSquare like this :
>>
>>
>>CSquare csq(A1)
>>csq += 8; // One row higher. csq is now equat to A2.
>>csq.GetRow(); // Will return 1 (0 based index)
>>csq.GetColumn(); // will return 0
>>
>>
>>
>>I think that with basic compiler optimisations like inlining this code will
>>bring no overhead in my engine. I already asked some friends about it and they
>>seem to think like me, but are not sure.
>>
>>Since it's CC related and there is some good programmers monitoring this board I
>>though I would ask here.
>>
>>What is your opinion about this?
>>
>>Mathieu Pagé
>
>There may be some tiny benefit to:
>
> unsigned int GetColumn()
> {
> return m_uiSquareIndex & 7; // Assumes 2's complement.
> }
>
> unsigned int GetRow()
> {
> return m_uiSquareIndex >> 3; // Assumes m_uiSquareIndex is >= 0
> }
>
>But the compiler may actually do those simple optimizations for you anyway.
>
>I don't see any important overhead in your class. Things like virtual functions
>and RTTI, structured exception handling, etc. add a little bit.
>
>By far, the algorithms chosen are more important than some little details about
>using C++ features.
Hi Dann, thanks for your answer,
I did some test and it seem there is no overhead to my class, at least in my
simple test function.
I know that the algorithms are more important than micro-optimisations, but I
just like thoses little hack that give a 0.01% performance boost to my engine.
Not that they are usefull performance amelioration, but I like to tweak code and
do micro optimisations. Hey ! CC programming is a hobby after all :)
I also looked at the two optimizations you provide for the modulo and division,
my compiler seem to do them for me and I think any other decent compiler will
do.
Mathieu Pagé
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.