
Maybe we should add a header to our detail (and/or pending) folder encapsulating the full versions of built-in integer arithmetic operations, that most(?) processors have, but neither C nor C++ let us access. I'm talking about functions like: std::pair<unsigned, bool> full_add( unsigned a1, unsigned a2 ); The processor has a "carry" flag whenever an integer addition overflows, but we can't access it (without assembly-language hacks). A conforming C++ workaround is to calculate the carry flag in advance before adding. But we could provide an implementation of this function that uses the assembly-language hacks to compute the sum and carry at once, encapsulating it for any other library (present or future) that needs full addition arithmetic. Other examples would be: std::pair<unsigned, bool> full_subtract( unsigned m, unsigned s ); // for quick access to the "borrow" state boost::array<unsigned, 2> full_multiply(unsigned f1, unsigned f2); // no need to do piecemeal multiply with 16-bit halves // result[1]: high part, result[0]: low part std::pair<boost::array<unsigned, 2>, unsigned> full_divide( unsigned (÷nd)[2], unsigned divisor ); // no need to do piecemeal division one-bit at a time // result.first[1]: quotient, high part // result.first[0]: quotient, low part // result.second: remainder I list only "unsigned int" here, but we could do versions for all the built-in integer types. The assembly-language implementations would require #segregating by processor/compiler type. -- Daryle Walker Mac, Internet, and Video Game Junkie darylew AT hotmail DOT com