📄 int64_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>int64.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </center><hr><h1>int64.h</h1><a href="int64_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="preprocessor">#ifndef _P_INT64_H</span>00002 <span class="preprocessor"></span><span class="preprocessor">#define _P_INT64_H</span>00003 <span class="preprocessor"></span>00005 <span class="comment">// Really big integer class for architectures without</span>00006 00007 <span class="preprocessor">#ifdef P_NEEDS_INT64</span>00008 <span class="preprocessor"></span>00009 <span class="keyword">class </span>PInt64__ {00010 <span class="keyword">public</span>:00011 operator long() <span class="keyword">const</span> { <span class="keywordflow">return</span> (long)low; }00012 operator int() <span class="keyword">const</span> { <span class="keywordflow">return</span> (int)low; }00013 operator short()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (short)low; }00014 operator char() <span class="keyword">const</span> { <span class="keywordflow">return</span> (char)low; }00015 00016 operator unsigned long() <span class="keyword">const</span> { <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)low; }00017 operator unsigned int() <span class="keyword">const</span> { <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)low; }00018 operator unsigned short()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)low; }00019 operator unsigned char() <span class="keyword">const</span> { <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)low; }00020 00021 <span class="keyword">protected</span>:00022 PInt64__() { }00023 PInt64__(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> l) : low(l), high(0) { }00024 PInt64__(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> l, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> h) : low(l), high(h) { }00025 00026 <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> PInt64__ & v) { low = v.low; high = v.high; }00027 00028 <span class="keywordtype">void</span> Inc() { <span class="keywordflow">if</span> (++low == 0) ++high; }00029 <span class="keywordtype">void</span> Dec() { <span class="keywordflow">if</span> (--low == 0) --high; }00030 00031 <span class="keywordtype">void</span> Or (<span class="keywordtype">long</span> v) { low |= v; }00032 <span class="keywordtype">void</span> And(<span class="keywordtype">long</span> v) { low &= v; }00033 <span class="keywordtype">void</span> Xor(<span class="keywordtype">long</span> v) { low ^= v; }00034 00035 <span class="keywordtype">void</span> Add(<span class="keyword">const</span> PInt64__ & v);00036 <span class="keywordtype">void</span> Sub(<span class="keyword">const</span> PInt64__ & v);00037 <span class="keywordtype">void</span> Mul(<span class="keyword">const</span> PInt64__ & v);00038 <span class="keywordtype">void</span> Div(<span class="keyword">const</span> PInt64__ & v);00039 <span class="keywordtype">void</span> Mod(<span class="keyword">const</span> PInt64__ & v);00040 <span class="keywordtype">void</span> Or (<span class="keyword">const</span> PInt64__ & v) { low |= v.low; high |= v.high; }00041 <span class="keywordtype">void</span> And(<span class="keyword">const</span> PInt64__ & v) { low &= v.low; high &= v.high; }00042 <span class="keywordtype">void</span> Xor(<span class="keyword">const</span> PInt64__ & v) { low ^= v.low; high ^= v.high; }00043 <span class="keywordtype">void</span> ShiftLeft(<span class="keywordtype">int</span> bits);00044 <span class="keywordtype">void</span> ShiftRight(<span class="keywordtype">int</span> bits);00045 00046 BOOL Eq(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> v)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> low == v && high == 0; }00047 BOOL Ne(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> v)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> low != v || high != 0; }00048 00049 BOOL Eq(<span class="keyword">const</span> PInt64__ & v)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> low == v.low && high == v.high; }00050 BOOL Ne(<span class="keyword">const</span> PInt64__ & v)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> low != v.low || high != v.high; }00051 00052 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> low, high;00053 };00054 00055 00056 <span class="preprocessor">#define DECL_OPS(cls, type) \</span>00057 <span class="preprocessor"> const cls & operator=(type v) { PInt64__::operator=(cls(v)); return *this; } \</span>00058 <span class="preprocessor"> cls operator+(type v) const { cls t = *this; t.Add(v); return t; } \</span>00059 <span class="preprocessor"> cls operator-(type v) const { cls t = *this; t.Sub(v); return t; } \</span>00060 <span class="preprocessor"> cls operator*(type v) const { cls t = *this; t.Mul(v); return t; } \</span>00061 <span class="preprocessor"> cls operator/(type v) const { cls t = *this; t.Div(v); return t; } \</span>00062 <span class="preprocessor"> cls operator%(type v) const { cls t = *this; t.Mod(v); return t; } \</span>00063 <span class="preprocessor"> cls operator|(type v) const { cls t = *this; t.Or (v); return t; } \</span>00064 <span class="preprocessor"> cls operator&(type v) const { cls t = *this; t.And(v); return t; } \</span>00065 <span class="preprocessor"> cls operator^(type v) const { cls t = *this; t.Xor(v); return t; } \</span>00066 <span class="preprocessor"> cls operator<<(type v) const { cls t = *this; t.ShiftLeft((int)v); return t; } \</span>00067 <span class="preprocessor"> cls operator>>(type v) const { cls t = *this; t.ShiftRight((int)v); return t; } \</span>00068 <span class="preprocessor"> const cls & operator+=(type v) { Add(v); return *this; } \</span>00069 <span class="preprocessor"> const cls & operator-=(type v) { Sub(v); return *this; } \</span>00070 <span class="preprocessor"> const cls & operator*=(type v) { Mul(v); return *this; } \</span>00071 <span class="preprocessor"> const cls & operator/=(type v) { Div(v); return *this; } \</span>00072 <span class="preprocessor"> const cls & operator|=(type v) { Or (v); return *this; } \</span>00073 <span class="preprocessor"> const cls & operator&=(type v) { And(v); return *this; } \</span>00074 <span class="preprocessor"> const cls & operator^=(type v) { Xor(v); return *this; } \</span>00075 <span class="preprocessor"> const cls & operator<<=(type v) { ShiftLeft((int)v); return *this; } \</span>00076 <span class="preprocessor"> const cls & operator>>=(type v) { ShiftRight((int)v); return *this; } \</span>00077 <span class="preprocessor"> BOOL operator==(type v) const { return Eq(v); } \</span>00078 <span class="preprocessor"> BOOL operator!=(type v) const { return Ne(v); } \</span>00079 <span class="preprocessor"> BOOL operator< (type v) const { return Lt(v); } \</span>00080 <span class="preprocessor"> BOOL operator> (type v) const { return Gt(v); } \</span>00081 <span class="preprocessor"> BOOL operator>=(type v) const { return !Gt(v); } \</span>00082 <span class="preprocessor"> BOOL operator<=(type v) const { return !Lt(v); } \</span>00083 <span class="preprocessor"></span>00084 <span class="preprocessor"></span>00085 <span class="keyword">class </span>PInt64 : <span class="keyword">public</span> PInt64__ {00086 <span class="keyword">public</span>:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -