25 T* operator-> ()
const {
return pObj; }
26 bool operator== (
const T* pobj)
const {
return pobj == pObj; }
27 bool operator!= (
const T* pobj)
const {
return pobj != pObj; }
29 bool operator== (
const SPtr<T>& spobj)
const {
return spobj.pObj == pObj; }
30 bool operator!= (
const SPtr<T>& spobj)
const {
return spobj.pObj != pObj; }
32 SPtr(T* pobj = 0) : pObj(pobj)
34 if (pObj) { pObj->count++; }
36 SPtr(
const SPtr& ptr) : pObj(ptr.pObj)
38 if (pObj) { pObj->count++; }
43 if (
this == &ptr) {
return *
this; }
44 if (pObj && --(pObj->count) == 0) {
delete pObj; }
45 if ((pObj = ptr.pObj)) { pObj->count++; }
51 if (pObj && --(pObj->count) == 0) {
delete pObj; }
58 template <
typename T,
int N>
class DArray;
60 template <
typename T,
int N>
64 inline T&
operator* () {
return ptr[idx % N]; }
65 inline T* operator-> () {
return &ptr[idx % N]; }
66 inline NIter& operator++ () { idx++;
return *
this;}
67 inline NIter& operator+= (
int n) { idx += n;
return *
this;}
69 inline bool operator== (
const NIter& iter) {
return idx == iter.idx && ptr == iter.ptr; }
70 inline bool operator!= (
const NIter& iter) {
return idx != iter.idx || ptr != iter.ptr; }
72 NIter(T* begin,
int last) : ptr(begin), idx(last) {}
79 template <
typename T,
int N>
82 DArray() : last(N), len(0) {}
88 T& insert(
const T& el)
90 len = (len == N ? len : len + 1);
91 last = ((last - 1) + N) % N;
96 #ifdef USE_SMART_INSERT
103 memmove(&elems[last + 1], &elems[last], (i - last)*
sizeof(T));
104 memset(&elems[last], 0,
sizeof(T));
105 last = (last + 1) % N;
107 memmove(&elems[i], &elems[i + 1], (last - i - 1)*
sizeof(T));
108 memset(&elems[last - 1], 0,
sizeof(T));
116 #ifndef USE_DIRTY_RESET
117 for (
int i = 0; i < len; i++) {
125 static const int size = N;
126 const T& operator [](
const int idx)
const {
return elems[idx]; }
127 T& operator [](
const int idx) {
return elems[idx]; }
136 template <
typename T,
int N>
139 typedef std::auto_ptr<CArray> Ptr;
143 for (iterator i = begin(); i != end(); ++i) {
149 iterator begin() {
return &elems[0]; }
150 iterator end() {
return &elems[N]; }
153 static const int size = N;
155 const T& operator [](
const int idx)
const {
return elems[idx]; }
156 T& operator [](
const int idx) {
return elems[idx]; }
bool operator==(const DecayNode &node1, const DecayNode &node2)
Compare two Decay Nodes: They are equal if All daughter decay nodes are equal or one of the daughter ...
bool operator!=(const DecayNode &node1, const DecayNode &node2)
Not equal: See operator==.
B2Vector3< DataType > operator*(DataType a, const B2Vector3< DataType > &p)
non-memberfunction Scaling of 3-vectors with a real number