blob: 5c16ad31a7c7f7584cea86aec48bcee481fc5cdb [file] [log] [blame]
// -Wall
#pragma version(1)
#pragma rs java_package_name(accum)
// Several checks for bad accumulator DATA TYPE (not bad accumulator FUNCTION)
/////////////////////////////////////////////////////////////////////////////
// accumulator cannot be incomplete array
/////////////////////////////////////////////////////////////////////////////
typedef int IntA[]; // incomplete (unknown element count)
#pragma rs reduce(redIntA) accumulator(AccumIntA) combiner(CombIntA)
static void AccumIntA(IntA *accum, int val) { }
static void CombIntA(IntA *accum, const IntA *val) { }
// outconverter does not help
#pragma rs reduce(redIntAOut) accumulator(AccumIntA) combiner(CombIntA) outconverter(OutIntA)
static void OutIntA(int *out, const IntA *val) { }
/////////////////////////////////////////////////////////////////////////////
// accumulator cannot be incomplete struct
/////////////////////////////////////////////////////////////////////////////
struct Incomplete;
#pragma rs reduce(redStructIncomplete) accumulator(AccumStructIncomplete) combiner(CombStructIncomplete)
static void AccumStructIncomplete(struct Incomplete *accum, int val) { }
static void CombStructIncomplete(struct Incomplete *accum, const struct Incomplete *other) { }
// outconverter does not help
#pragma rs reduce(redStructIncompleteOut) accumulator(AccumStructIncomplete) combiner(CombStructIncomplete) \
outconverter(OutStructIncomplete)
static void OutStructIncomplete(int *out, const struct Incomplete *val) { }
/////////////////////////////////////////////////////////////////////////////
// accumulator cannot be function
/////////////////////////////////////////////////////////////////////////////
typedef void Fn(void);
#pragma rs reduce(redFn) accumulator(AccumFn) combiner(CombineFn)
static void AccumFn(Fn *accum, int val) { }
static void CombineFn(Fn *accum, const Fn *other) { }
// outconverter does not help
#pragma rs reduce(redFnOut) accumulator(AccumFn) combiner(CombineFn) outconverter(OutFn)
static void OutFn(int *out, const Fn *val) { }
/////////////////////////////////////////////////////////////////////////////
// accumulator cannot be object
/////////////////////////////////////////////////////////////////////////////
#pragma rs reduce(redObj) accumulator(AccumObj) combiner(CombineObj)
static void AccumObj(rs_element *accum, int val) { }
static void CombineObj(rs_element *accum, const rs_element *other) { }
// outconverter does not help
#pragma rs reduce(redObjOut) accumulator(AccumObj) combiner(CombineObj) outconverter(OutObj)
static void OutObj(int *out, const rs_element *val) { }