diff --git a/TinySTL/CircularBuffer.h b/TinySTL/CircularBuffer.h index 3137ded..92aa859 100644 --- a/TinySTL/CircularBuffer.h +++ b/TinySTL/CircularBuffer.h @@ -77,20 +77,24 @@ namespace TinySTL{ return index; } public: - friend cb_iter operator +(const cb_iter& cit, std::ptrdiff_t i); - friend cb_iter operator -(const cb_iter& cit, std::ptrdiff_t i); + template + friend cb_iter operator +(const cb_iter& cit, std::ptrdiff_t i); + template + friend cb_iter operator -(const cb_iter& cit, std::ptrdiff_t i); }; template cb_iter operator +(const cb_iter& cit, std::ptrdiff_t i){ - auto real_i = i % N; - cb_iter res = *this; + int real_i = i % (std::ptrdiff_t)N;//assume i >= 0 + if (real_i < 0) + real_i += 5; + cb_iter res = cit; res.setIndex_(res.index_ + real_i); res.setPtr_(res.ptr_ + res.index_); return res; } template cb_iter operator -(const cb_iter& cit, std::ptrdiff_t i){ - cb_iter res = *this; + cb_iter res = cit; return (res + (-i)); } }//end of anonymous namespace