diff --git a/indra/llcommon/llstrider.h b/indra/llcommon/llstrider.h index a903655ed7..de723657c8 100644 --- a/indra/llcommon/llstrider.h +++ b/indra/llcommon/llstrider.h @@ -37,13 +37,36 @@ template class LLStrider }; U32 mSkip; public: - - LLStrider() { mObjectp = NULL; mSkip = sizeof(Object); mBufferEnd = 0; } ~LLStrider() { } - const LLStrider& operator = (Object *first) { mObjectp = first; mBufferEnd = 0; return *this;} void setStride (S32 skipBytes) { mSkip = (skipBytes ? skipBytes : sizeof(Object));} + void skip(const U32 index) { mBytep += mSkip*index;} + U32 getSkip() const { return mSkip; } + +#ifndef OPENSIM // protect against buffer overflows, but only for non HAvok builds. Otherwise changing the object size plays really foul when used in the binary Havok blob + LLStrider() { mObjectp = NULL; mSkip = sizeof(Object); } + const LLStrider& operator = (Object *first) { mObjectp = first; return *this;} + + LLStrider operator+(const S32& index) + { + LLStrider ret; + ret.mBytep = mBytep + mSkip*index; + ret.mSkip = mSkip; + return ret; + } + + Object* get() { return mObjectp; } + Object* operator->() { return mObjectp; } + Object& operator *() { return *mObjectp; } + Object* operator ++(int) { Object* old = mObjectp; mBytep += mSkip; return old; } + Object* operator +=(int i) { mBytep += mSkip*i; return mObjectp; } + + Object& operator[](U32 index) { return *(Object*)(mBytep + (mSkip * index)); } +#else + LLStrider() { mObjectp = NULL; mSkip = sizeof(Object); mBufferEnd = 0; } + const LLStrider& operator = (Object *first) { mObjectp = first; mBufferEnd = 0; return *this;} + LLStrider operator+(const S32& index) { LLStrider ret; @@ -54,19 +77,6 @@ public: return ret; } - void skip(const U32 index) { mBytep += mSkip*index;} - U32 getSkip() const { return mSkip; } - - // protect against buffer overflows - - // Object* get() { return mObjectp; } - // Object* operator->() { return mObjectp; } - // Object& operator *() { return *mObjectp; } - // Object* operator ++(int) { Object* old = mObjectp; mBytep += mSkip; return old; } - // Object* operator +=(int i) { mBytep += mSkip*i; return mObjectp; } - - // Object& operator[](U32 index) { return *(Object*)(mBytep + (mSkip * index)); } - Object* get() { if( !assertValid( mBytep ) ) @@ -144,7 +154,7 @@ private: #endif Object mDummy; - // +#endif }; #endif // LL_LLSTRIDER_H