// pitch: width * pixel size static void fcImageFlipY(void *image_, int width, int height, int pitch) { std::vector<char> buf_(pitch); char *image = (char*)image_; char *buf = &buf_[0]; for (int y = 0; y < height / 2; ++y) { int iy = height - y - 1; memcpy(buf, image + (pitch*y), pitch); memcpy(image + (pitch*y), image + (pitch*iy), pitch); memcpy(image + (pitch*iy), buf, pitch); } }
void fcImageFlipY(void *image_, int width, int height, fcPixelFormat fmt) { size_t pitch = width * fcGetPixelSize(fmt); Buffer buf_((size_t)pitch); char *image = (char*)image_; char *buf = &buf_[0]; for (int y = 0; y < height / 2; ++y) { int iy = height - y - 1; memcpy(buf, image + (pitch*y), pitch); memcpy(image + (pitch*y), image + (pitch*iy), pitch); memcpy(image + (pitch*iy), buf, pitch); } }
void c4_FormatB::SetOne(int index_, const c4_Bytes &xbuf_, bool ignoreMemos_) { // this fixes bug in 2.4.0 when copying string from higher row // TODO: this fix is very conservative, figure out when to copy // (can probably look at pointer to see whether it's from us) int sz = xbuf_.Size(); c4_Bytes buf_(xbuf_.Contents(), sz, 0 < sz && sz <= c4_Column::kSegMax); c4_Column *cp = &_data; t4_i32 start = Offset(index_); int len = Offset(index_ + 1) - start; if (!ignoreMemos_ && _memos.GetAt(index_) != 0) len = ItemLenOffCol(index_, start, cp); int m = buf_.Size(); int n = m - len; if (n > 0) cp->Grow(start, n); else if (n < 0) cp->Shrink(start, - n); else if (m == 0) return ; // no size change and no contents _recalc = true; cp->StoreBytes(start, buf_); if (n && cp == &_data) { // if size has changed int k = _offsets.GetSize() - 1; // if filling in an empty entry at end: extend offsets first if (m > 0 && index_ >= k) { _offsets.InsertAt(k, _offsets.GetAt(k), index_ - k + 1); k = index_ + 1; d4_assert(k == _offsets.GetSize() - 1); } // adjust following entry offsets while (++index_ <= k) _offsets.ElementAt(index_) += n; } d4_assert((t4_i32)_offsets.GetAt(_offsets.GetSize() - 1) == _data.ColSize()); }
void FHT::_transform(float* p, int n, int k) { if (n == 8) { transform8(p + k); return; } int i, j, ndiv2 = n / 2; float a, *t1, *t2, *t3, *t4, *ptab, *pp; for (i = 0, t1 = buf_(), t2 = buf_() + ndiv2, pp = &p[k]; i < ndiv2; i++) *t1++ = *pp++, *t2++ = *pp++; std::copy(buf_(), buf_() + n, p + k); _transform(p, ndiv2, k); _transform(p, ndiv2, k + ndiv2); j = num_ / ndiv2 - 1; t1 = buf_(); t2 = t1 + ndiv2; t3 = p + k + ndiv2; ptab = tab_(); pp = p + k; a = *ptab++ * *t3++; a += *ptab * *pp; ptab += j; *t1++ = *pp + a; *t2++ = *pp++ - a; for (i = 1, t4 = p + k + n; i < ndiv2; i++, ptab += j) { a = *ptab++ * *t3++; a += *ptab * *--t4; *t1++ = *pp + a; *t2++ = *pp++ - a; } std::copy(buf_(), buf_() + n, p + k); }