]>
Commit | Line | Data |
---|---|---|
23324ae1 FM |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: longlong.h | |
3 | // Purpose: documentation for wxLongLong class | |
4 | // Author: wxWidgets team | |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /** | |
10 | @class wxLongLong | |
11 | @wxheader{longlong.h} | |
7c913512 | 12 | |
23324ae1 FM |
13 | This class represents a signed 64 bit long number. It is implemented using the |
14 | native 64 bit type where available (machines with 64 bit longs or compilers | |
15 | which have (an analog of) @e long long type) and uses the emulation code in | |
16 | the other cases which ensures that it is the most efficient solution for | |
17 | working with 64 bit integers independently of the architecture. | |
7c913512 | 18 | |
23324ae1 FM |
19 | wxLongLong defines all usual arithmetic operations such as addition, |
20 | subtraction, bitwise shifts and logical operations as well as multiplication | |
21 | and division (not yet for the machines without native @e long long). It | |
7c913512 | 22 | also has operators for implicit construction from and conversion to the native |
23324ae1 | 23 | @e long long type if it exists and @e long. |
7c913512 | 24 | |
23324ae1 FM |
25 | You would usually use this type in exactly the same manner as any other |
26 | (built-in) arithmetic type. Note that wxLongLong is a signed type, if you | |
27 | want unsigned values use wxULongLong which has exactly the same API as | |
28 | wxLongLong except when explicitly mentioned otherwise. | |
7c913512 | 29 | |
23324ae1 FM |
30 | If a native (i.e. supported directly by the compiler) 64 bit integer type was |
31 | found to exist, @e wxLongLong_t macro will be defined to correspond to it. | |
7c913512 | 32 | Also, in this case only, two additional macros will be defined: |
23324ae1 | 33 | wxLongLongFmtSpec for printing 64 bit integers |
7c913512 | 34 | using the standard @c printf() function (but see also |
23324ae1 FM |
35 | wxLongLong::ToString for a more portable solution) and |
36 | wxLL for defining 64 bit integer compile-time constants. | |
7c913512 | 37 | |
23324ae1 FM |
38 | @library{wxbase} |
39 | @category{data} | |
40 | */ | |
7c913512 | 41 | class wxLongLong |
23324ae1 FM |
42 | { |
43 | public: | |
44 | /** | |
45 | Constructor from 2 longs: the high and low part are combined into one | |
46 | wxLongLong. | |
47 | */ | |
48 | wxLongLong(long hi, unsigned long lo); | |
49 | ||
50 | //@{ | |
51 | /** | |
52 | Returns an absolute value of wxLongLong - either making a copy (const version) | |
53 | or modifying it in place (the second one). Not in wxULongLong. | |
54 | */ | |
55 | wxLongLong Abs(); | |
7c913512 | 56 | wxLongLong Abs(); |
23324ae1 FM |
57 | //@} |
58 | ||
59 | /** | |
60 | This allows to convert a double value to wxLongLong type. Such conversion is | |
61 | not always possible in which case the result will be silently truncated in a | |
62 | platform-dependent way. Not in wxULongLong. | |
63 | */ | |
64 | wxLongLong Assign(double d); | |
65 | ||
66 | /** | |
67 | Returns the high 32 bits of 64 bit integer. | |
68 | */ | |
69 | long GetHi(); | |
70 | ||
71 | /** | |
72 | Returns the low 32 bits of 64 bit integer. | |
73 | */ | |
74 | unsigned long GetLo(); | |
75 | ||
76 | /** | |
77 | Convert to native long long (only for compilers supporting it) | |
78 | */ | |
79 | wxLongLong_t GetValue(); | |
80 | ||
81 | /** | |
82 | Returns the value as @c double. | |
83 | */ | |
84 | double ToDouble(); | |
85 | ||
86 | /** | |
87 | Truncate wxLongLong to long. If the conversion loses data (i.e. the wxLongLong | |
88 | value is outside the range of built-in long type), an assert will be triggered | |
89 | in debug mode. | |
90 | */ | |
91 | long ToLong(); | |
92 | ||
93 | /** | |
94 | Returns the string representation of a wxLongLong. | |
95 | */ | |
96 | wxString ToString(); | |
97 | ||
98 | /** | |
99 | Adds 2 wxLongLongs together and returns the result. | |
100 | */ | |
101 | wxLongLong operator+(const wxLongLong& ll); | |
102 | ||
103 | //@{ | |
104 | /** | |
105 | Pre/post increment operator. | |
106 | */ | |
107 | wxLongLong operator++(); | |
7c913512 | 108 | wxLongLong operator++(int ); |
23324ae1 FM |
109 | //@} |
110 | ||
111 | /** | |
112 | Add another wxLongLong to this one. | |
113 | */ | |
114 | wxLongLong operator+(const wxLongLong& ll); | |
115 | ||
116 | /** | |
117 | Subtracts 2 wxLongLongs and returns the result. | |
118 | */ | |
119 | wxLongLong operator-(const wxLongLong& ll); | |
120 | ||
121 | //@{ | |
122 | /** | |
123 | Pre/post decrement operator. | |
124 | */ | |
125 | wxLongLong operator--(); | |
7c913512 | 126 | wxLongLong operator--(int ); |
23324ae1 FM |
127 | //@} |
128 | ||
129 | /** | |
130 | Subtracts another wxLongLong from this one. | |
131 | */ | |
132 | wxLongLong operator-(const wxLongLong& ll); | |
133 | ||
134 | /** | |
135 | Assignment operator from unsigned long long. The sign bit will be copied too. | |
136 | ||
137 | This function is new since wxWidgets version 2.7.0 | |
138 | */ | |
139 | wxLongLong& operator operator=(const wxULongLong & ll); | |
140 | }; | |
141 | ||
142 | ||
143 | // ============================================================================ | |
144 | // Global functions/macros | |
145 | // ============================================================================ | |
146 | ||
147 | /** | |
148 | This macro is defined to contain the @c printf() format specifier using | |
149 | which 64 bit integer numbers (i.e. those of type @c wxLongLong_t) can be | |
150 | printed. Example of using it: | |
151 | @code | |
152 | #ifdef wxLongLong_t | |
153 | wxLongLong_t ll = wxLL(0x1234567890abcdef); | |
154 | printf("Long long = %" wxLongLongFmtSpec "x\n", ll); | |
155 | #endif | |
156 | @endcode | |
7c913512 | 157 | |
23324ae1 FM |
158 | @sa wxLL |
159 | */ | |
160 | ||
161 | ||
162 | /** | |
163 | This macro is defined for the platforms with a native 64 bit integer type and | |
164 | allows to define unsigned 64 bit compile time constants: | |
165 | @code | |
166 | #ifdef wxLongLong_t | |
167 | unsigned wxLongLong_t ll = wxULL(0x1234567890abcdef); | |
168 | #endif | |
169 | @endcode | |
7c913512 | 170 | |
23324ae1 FM |
171 | @sa wxLL, wxLongLong |
172 | */ | |
173 | #define wxLongLong_t wxULL(number) /* implementation is private */ | |
174 | ||
175 | /** | |
176 | This macro is defined for the platforms with a native 64 bit integer type and | |
177 | allows to define 64 bit compile time constants: | |
178 | @code | |
179 | #ifdef wxLongLong_t | |
180 | wxLongLong_t ll = wxLL(0x1234567890abcdef); | |
181 | #endif | |
182 | @endcode | |
7c913512 | 183 | |
23324ae1 FM |
184 | @sa wxULL, wxLongLong |
185 | */ | |
186 | #define wxLongLong_t wxLL(number) /* implementation is private */ | |
187 |