00001 // AUTOMATICALLY GENERATED -- DO NOT EDIT! -*- c++ -*- 00002 00003 #ifndef kern_types_h 00004 #define kern_types_h 00005 00006 #include "types.h" 00007 00008 // 00009 // INTERFACE definition follows 00010 // 00011 00012 00013 template< typename _Ty > 00014 struct P_ptr 00015 { 00016 00017 public: 00018 00019 typedef _Ty *Raw_type; 00020 typedef Address Unsigned_type; 00021 00022 P_ptr< _Ty > &operator ++ () // prefix 00023 { 00024 ++__ptr; 00025 return *this; 00026 } 00027 00028 P_ptr< _Ty > &operator -- () // prefix 00029 { 00030 --__ptr; 00031 return *this; 00032 } 00033 00034 P_ptr< _Ty > operator ++ (int) // postfix 00035 { 00036 return P_ptr(__ptr++); 00037 } 00038 00039 P_ptr< _Ty > operator -- (int) // postfix 00040 { 00041 return P_ptr(__ptr--); 00042 } 00043 00044 P_ptr< _Ty > operator + ( Smword pd ) const 00045 { 00046 return P_ptr(__ptr + pd); 00047 } 00048 00049 P_ptr< _Ty > operator - ( Smword pd ) const 00050 { 00051 return P_ptr(__ptr - pd); 00052 } 00053 00054 P_ptr< _Ty > &operator += ( Smword pd ) 00055 { 00056 __ptr += pd; 00057 return *this; 00058 } 00059 00060 P_ptr< _Ty > &operator -= ( Smword pd ) 00061 { 00062 __ptr -= pd; 00063 return *this; 00064 } 00065 00066 P_ptr< _Ty > operator & ( Mword o ) 00067 { 00068 return (_Ty*)((Mword)__ptr & o); 00069 } 00070 00071 bool operator == ( P_ptr const &o ) const 00072 { 00073 return (void*)__ptr == (void*)o.__ptr; 00074 } 00075 00076 bool operator != ( P_ptr const &o ) const 00077 { 00078 return (void*)__ptr != (void*)o.__ptr; 00079 } 00080 00081 bool is_null() const 00082 { 00083 return __ptr == (void*)(-1); 00084 } 00085 00086 bool is_invalid() const 00087 { 00088 return __ptr == (void*)(-1); 00089 } 00090 00091 _Ty* get_raw() const 00092 { 00093 return __ptr; 00094 } 00095 00096 Unsigned_type get_unsigned() const 00097 { 00098 return (Unsigned_type)__ptr; 00099 } 00100 00101 P_ptr<void> to_void() const 00102 { 00103 return P_ptr<void>((void*)__ptr); 00104 } 00105 00106 P_ptr< _Ty > operator = (_Ty *o) 00107 { 00108 return P_ptr(__ptr= o); 00109 } 00110 00111 P_ptr< _Ty > operator = (P_ptr<_Ty> const &o) 00112 { 00113 return P_ptr(__ptr= o.__ptr); 00114 } 00115 00116 template< typename _To > 00117 static P_ptr cast( P_ptr< _To > const &o) 00118 { 00119 return P_ptr<_Ty>(static_cast<_Ty*>(o.get_raw())); 00120 } 00121 00122 explicit P_ptr( Mword addr ) 00123 : __ptr((_Ty*)addr) 00124 {} 00125 00126 P_ptr( _Ty *p = (_Ty*)(-1) ) 00127 : __ptr(p) 00128 {} 00129 00130 #if 0 00131 // avoid this copy constructor so the gcc does more optimization 00132 P_ptr( P_ptr<_Ty> const &o ) 00133 : __ptr(o.get_raw()) 00134 {} 00135 #endif 00136 00137 template< typename _To > 00138 P_ptr( P_ptr<_To> const &o ) 00139 : __ptr(o.get_raw()) 00140 {} 00141 00142 private: 00143 00144 _Ty *__ptr; 00145 00146 }; 00147 00148 #endif // kern_types_h