23#include "rawspeedconfig.h"
34#include <initializer_list>
58 std::copy(src.begin(), src.end(), dest.begin());
69 if (
auto [destAsStrip, srcAsStrip] =
71 destAsStrip && srcAsStrip) {
75 for (
int row = 0; row != src.
height(); ++row)
80 const std::byte* srcPtr,
int srcPitch,
int rowSize,
90 auto dest =
Array2DRef(destPtr, rowSize, height, dstPitch);
91 auto src =
Array2DRef(srcPtr, rowSize, height, srcPitch);
96 requires std::is_pointer_v<T>
102 "uintptr_t can not represent all pointer values?");
103 return reinterpret_cast<uintptr_t
>(value) % multiple;
107 requires std::is_integral_v<T>
112 return value % multiple;
122 T roundedDown = value - offset;
126 return roundedDown + multiple;
142 return roundUp(value, div) / div;
147 return (value != 0) ? (1 + ((value - 1) / div)) : 0;
151constexpr RAWSPEED_READNONE
bool isAligned(
T value,
size_t multiple) {
155template <
typename T,
typename T2>
156bool RAWSPEED_READONLY
isIn(
const T value,
157 const std::initializer_list<T2>& list) {
158 return std::any_of(list.begin(), list.end(),
159 [value](
const T2& t) { return t == value; });
165 size_t startpos = str.find_first_not_of(
" \t");
168 size_t endpos = str.find_last_not_of(
" \t");
171 if ((startpos == std::string::npos) || (endpos == std::string::npos))
174 str = str.substr(startpos, endpos - startpos + 1);
175 return {str.begin(), str.end()};
178inline std::vector<std::string>
splitString(
const std::string& input,
180 std::vector<std::string> result;
182 std::string_view str = input;
183 while (!str.empty()) {
184 std::string_view::size_type pos = str.find_first_of(c);
186 if (pos == std::string_view::npos)
189 auto substr = str.substr(0, pos);
192 result.emplace_back(substr);
194 str.remove_prefix(std::min(str.size(), 1 + substr.size()));
200template <
int N,
typename T>
201inline std::array<T, N>
to_array(
const std::vector<T>& v) {
203 assert(v.size() == N &&
"Size mismatch");
204 std::move(v.begin(), v.end(), a.begin());
bool RAWSPEED_READNONE __attribute__((visibility("default"))) benchmarkDryRun()
assert(dim.area() >=area)
int RAWSPEED_READONLY height() const
Optional< Array1DRef< T > > getAsArray1DRef() const
int RAWSPEED_READONLY width() const
constexpr T RAWSPEED_READNONE roundToMultiple(T value, uint64_t multiple, bool roundDown)
constexpr uint64_t RAWSPEED_READNONE roundUpDivisionSafe(uint64_t value, uint64_t div)
constexpr uint64_t RAWSPEED_READNONE roundUp(uint64_t value, uint64_t multiple)
std::string trimSpaces(std::string_view str)
void copyPixels(std::byte *destPtr, int dstPitch, const std::byte *srcPtr, int srcPitch, int rowSize, int height)
constexpr uint64_t RAWSPEED_READNONE getMisalignmentOffset(T value, uint64_t multiple)
constexpr uint64_t RAWSPEED_READNONE roundUpDivision(uint64_t value, uint64_t div)
constexpr uint64_t RAWSPEED_READNONE roundDown(uint64_t value, uint64_t multiple)
void void copyPixelsImpl(Array1DRef< std::byte > dest, Array1DRef< const std::byte > src)
void writeLog(DEBUG_PRIO priority, const char *format,...)
Array2DRef(Array1DRef< T > data, int width, int height, int pitch) -> Array2DRef< T >
bool RAWSPEED_READONLY isIn(const T value, const std::initializer_list< T2 > &list)
constexpr RAWSPEED_READNONE bool isAligned(T value, size_t multiple)
constexpr unsigned RAWSPEED_READNONE bitwidth(T unused={})
std::vector< std::string > splitString(const std::string &input, char c=' ')
std::array< T, N > to_array(const std::vector< T > &v)
int rawspeed_get_number_of_processor_cores()