| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: longlong.h
- // Purpose: interface of wxLongLong
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxLongLong
- This class represents a signed 64 bit long number. It is implemented using the
- native 64 bit type where available (machines with 64 bit longs or compilers
- which have (an analog of) @e long long type) and uses the emulation code in
- the other cases which ensures that it is the most efficient solution for
- working with 64 bit integers independently of the architecture.
- wxLongLong defines all usual arithmetic operations such as addition,
- subtraction, bitwise shifts and logical operations as well as multiplication
- and division (not yet for the machines without native @e long long).
- It also has operators for implicit construction from and conversion to the native
- @e long long type if it exists and @e long.
- You would usually use this type in exactly the same manner as any other
- (built-in) arithmetic type. Note that wxLongLong is a signed type, if you
- want unsigned values use wxULongLong which has exactly the same API as
- wxLongLong except when explicitly mentioned otherwise.
- If a native (i.e. supported directly by the compiler) 64 bit integer type was
- found to exist, @e wxLongLong_t macro will be defined to correspond to it.
- Also, in this case only, two additional macros will be defined:
- - wxLongLongFmtSpec() for printing 64 bit integers using the standard @c printf()
- function (but see also wxLongLong::ToString for a more portable solution);
- - wxLL() for defining 64 bit integer compile-time constants.
- @library{wxbase}
- @category{data}
- */
- class wxLongLong
- {
- public:
- /**
- Default constructor initializes the object to 0.
- */
- wxLongLong();
- /**
- Constructor from native long long (only for compilers supporting it).
- */
- wxLongLong(wxLongLong_t ll);
- /**
- Constructor from 2 longs: the high and low part are combined into one
- wxLongLong.
- */
- wxLongLong(long hi, unsigned long lo);
- //@{
- /**
- Returns an absolute value of wxLongLong - either making a copy (const version)
- or modifying it in place (the second one). Not in wxULongLong.
- */
- wxLongLong Abs() const;
- wxLongLong& Abs();
- //@}
- /**
- This allows to convert a double value to wxLongLong type.
- Such conversion is not always possible in which case the result will be
- silently truncated in a platform-dependent way. Not in wxULongLong.
- */
- wxLongLong Assign(double d);
- /**
- Returns the high 32 bits of 64 bit integer.
- */
- long GetHi() const;
- /**
- Returns the low 32 bits of 64 bit integer.
- */
- unsigned long GetLo() const;
- /**
- Convert to native long long (only for compilers supporting it).
- */
- wxLongLong_t GetValue() const;
- /**
- Returns the value as @c double.
- */
- double ToDouble() const;
- /**
- Truncate wxLongLong to long. If the conversion loses data (i.e. the wxLongLong
- value is outside the range of built-in long type), an assert will be triggered
- in debug mode.
- */
- long ToLong() const;
- /**
- Returns the string representation of a wxLongLong.
- */
- wxString ToString() const;
- /**
- Adds 2 wxLongLongs together and returns the result.
- */
- wxLongLong operator+(const wxLongLong& ll) const;
- /**
- Add another wxLongLong to this one.
- */
- wxLongLong& operator+(const wxLongLong& ll);
- /**
- Subtracts 2 wxLongLongs and returns the result.
- */
- wxLongLong operator-(const wxLongLong& ll) const;
- /**
- Subtracts another wxLongLong from this one.
- */
- wxLongLong& operator-(const wxLongLong& ll);
- //@{
- /**
- Pre/post increment operator.
- */
- wxLongLong operator++();
- wxLongLong operator++(int);
- //@}
- //@{
- /**
- Pre/post decrement operator.
- */
- wxLongLong operator--();
- wxLongLong operator--(int);
- //@}
- /**
- Returns the value of this wxLongLong with opposite sign. Not in wxULongLong.
- */
- wxLongLong operator-() const;
- /**
- Assignment operator from unsigned long long. The sign bit will be copied too.
- @since 2.7.0
- */
- wxLongLong& operator=(const wxULongLong& ll);
- /**
- Assignment operator from native long long (only for compilers supporting it).
- */
- wxLongLong& operator=(wxLongLong_t ll);
- /**
- Assignment operator from native unsigned long long (only for compilers supporting it).
- @since 2.7.0
- */
- wxLongLong& operator=(wxULongLong_t ll);
- /**
- Assignment operator from long.
- @since 2.7.0
- */
- wxLongLong& operator=(long l);
- /**
- Assignment operator from unsigned long.
- @since 2.7.0
- */
- wxLongLong& operator=(unsigned long l);
- };
- /**
- @class wxULongLong
- This class represents an unsigned 64 bit long number.
- Since wxULongLong has exactly the same API as wxLongLong, please refer
- to wxLongLong documentation (this page exists only as redirection).
- @library{wxbase}
- @category{data}
- */
- class wxULongLong
- {
- };
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_misc */
- //@{
- /**
- This macro is defined to contain the @c printf() format specifier using
- which 64 bit integer numbers (i.e. those of type @c wxLongLong_t) can be
- printed. Example of using it:
- @code
- #ifdef wxLongLong_t
- wxLongLong_t ll = wxLL(0x1234567890abcdef);
- printf("Long long = %" wxLongLongFmtSpec "x\n", ll);
- #endif
- @endcode
- @see wxLL()
- @header{wx/longlong.h}
- */
- #define wxLongLongFmtSpec
- /**
- This macro is defined for the platforms with a native 64 bit integer type
- and allow the use of 64 bit compile time constants:
- @code
- #ifdef wxLongLong_t
- wxLongLong_t ll = wxLL(0x1234567890abcdef);
- #endif
- @endcode
- @see wxULL(), wxLongLong
- @header{wx/longlong.h}
- */
- wxLongLong_t wxLL(number);
- /**
- This macro is defined for the platforms with a native 64 bit integer type
- and allow the use of 64 bit compile time constants:
- @code
- #ifdef wxLongLong_t
- unsigned wxLongLong_t ll = wxULL(0x1234567890abcdef);
- #endif
- @endcode
- @see wxLL(), wxLongLong
- @header{wx/longlong.h}
- */
- wxLongLong_t wxULL(number);
- //@}
|