Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************Module*Header*******************************\
* Module Name: equad.hxx * * A class version of LARGE_INTEGER's * * Created: 26-Apr-1991 12:48:13 * Author: Kirk Olynyk [kirko] * * Copyright (c) 1991-1999 Microsoft Corporation * \**************************************************************************/
extern "C" {
VOID vEfToLfx( EFLOAT *pefloat, LONGLONG *plfx );
};
#define DIV(u64,u32) \
(((u64) < ULONG_MAX) ? (((ULONG) (u64)) / (u32)) : \ RtlEnlargedUnsignedDivide(*(ULARGE_INTEGER*) &(u64),(u32),0))
#define DIVREM(u64,u32,pul) \
RtlEnlargedUnsignedDivide(*(ULARGE_INTEGER*) &(u64), (u32), (pul))
#define VDIV(u64,u32,pul) \
if ((LONGLONG)u64 >= 0) \ { \ *(LARGE_INTEGER*) &(u64) = \ RtlExtendedLargeIntegerDivide( \ *(LARGE_INTEGER *)&(u64), \ (u32), \ (pul) \ ); \ } \ else \ { \ LONGLONG ll = -u64; \ \ *(LARGE_INTEGER*) &(ll) = \ RtlExtendedLargeIntegerDivide( \ *(LARGE_INTEGER *)&(ll), \ (u32), \ (pul) \ ); \ u64 = -ll; \ }
/*********************************Class************************************\
* class EPOINTQF * * History: * 25-Sep-1991 -by- Bodin Dresevic [BodinD] * Wrote it. \**************************************************************************/
class EPOINTQF // eptqf
{ public: LONGLONG x; LONGLONG y;
// Constructor -- This one is to allow EPOINTQF inside other classes.
EPOINTQF() {} ~EPOINTQF() {}
// Operator= -- Create from a POINTL
VOID operator=(POINTL& ptl) { x = ((LONGLONG) ptl.x) << 32; y = ((LONGLONG) ptl.y) << 32; }
// Operator= -- Create from a POINTQF
VOID operator=(POINTQF& ptqf) { *((PPOINTQF)this) = ptqf; }
// we need one to convert to and from EPOINTFL for wendy's xform stuff
// Operator= -- Create from a EPOINTFL
VOID operator=(EPOINTFL& eptfl) { vEfToLfx(&eptfl.x,&this->x); vEfToLfx(&eptfl.y,&this->y); }
// Operator+= -- Add in another POINTQF.
VOID operator+=(POINTQF& ptqf) { x += *(LONGLONG*) &(ptqf.x); y += *(LONGLONG*) &(ptqf.y); }
// Operator+= -- Add in another EPOINTQF.
VOID operator+=(EPOINTQF& ptqf) { x += ptqf.x; y += ptqf.y; }
// Operator-= -- subtract another POINTQF.
VOID operator-=(POINTQF& ptqf) { x -= *(LONGLONG*)&(ptqf.x); y -= *(LONGLONG*)&(ptqf.y); }
// Operator*= -- multiply vector by a LONG number
VOID operator*=(LONG l) { x *= l; y *= l; }
// Operator*= -- divide vector by a LONG number
VOID operator/=(LONG l) { x /= l; y /= l; }
// vSetToZero -- make the null vetor
VOID vSetToZero() { x = y = 0; } };
|