gcc *.o -shared -o file.so [-l<libraries>]
#include <iostream>
template <class TIPE, typename T_M> void my_qsort(
TIPE *buf,
int first,
int last,
T_M TIPE::*m
){
std::cout << (buf->*m) << std::endl;
}
struct Color {
union {
char hsv[3];
struct {
char hsv0;
char hsv1;
char hsv2;
};
};
};
int main() {
Color color = { "hs" };
my_qsort(
&color,
0,
0,
&Color::hsv0
);
my_qsort(
&color,
0,
0,
&Color::hsv1
);
return 0;
}
template<typename T>
T cast2T(int dummy, ...){
va_list args;
va_start(args, dummy);
T result = va_arg(args, T);
va_end(args);
return result;
}
template<typename T>
void* cast2ptr(T mp) {
union {
T mp;
void* p;
} caster = {mp};
return caster.p;
}
template<typename T>
T castFromPtr(void* p) {
union {
void* p;
T mp;
} caster = {p};
return caster.mp;
}
int main() {
Color color = { "hs" };
char (Color::*hsvA)[3] = &Color::hsv;
char (Color::*hsvB) = cast2T<char (Color::*)>(0, cast2T<char*>(0, hsvA) + 1);
my_qsort(
&color,
0,
0,
hsvB
);
char (Color::*hsvC) = castFromPtr<char (Color::*)>( ((char*) cast2ptr(hsvA)) + 1);
my_qsort(
&color,
0,
0,
hsvC
);
return 0;
}
#include <iostream>
template <class _Ty, typename _Getter> void my_qsort(_Ty *buf, int first, int last, _Getter g){
for(; first != last; first++) {
std::cout << "VALUE[" << first << "] = " << g(buf[first]) << std::endl;
}
}
struct Color {
double hsv[3];
};
int main() {
Color color[3] = {
{ 0.0, 0.1, 0.0 },
{ 0.0, 0.2, 0.0 },
{ 0.0, 0.3, 0.0 },
};
my_qsort(
color,
0,
3,
[](const Color& c) { return c.hsv[1]; }
);
return 0;
}
// g++ main.cpp -std=c++0x -o main
// ./main
// VALUE[0] = 0.1
// VALUE[1] = 0.2
// VALUE[2] = 0.3
поднят новый репозиторий git, пока пустой; в дальнейшем изменения будут в нескольких (совершенно разных) папках, эти изменения и нужно отслеживать. Добавлять огромную кучу статических файлов нет никакого желания, трекать нужно только то, что нужно.
#define sign(x) ((x) == 0 ? 0 : ((x) > 0 ? 1 : -1))
#define vmul(i,j,k) = ((x[(j)]-x[(i)])*(y[(k)]-y[(j)])-(x[(k)]-x[(j)])*(y[(j)]-y[(i)]))
bool function isConvex(double *x, double *y, int n) {
S = sign(vmul(n-2, n-1, 0));
if ((S1 = vmul(n-1, 0, 1)) != 0 && sign(S1) != S)
return false;
for (int i = 0; i < n-2; i++)
if ((S1 = vmul(i, i+1, i+2)) != 0 && sign(S1) != S )
return false;
return true;
}
vec4 tex1 = texture2D(texture1, position);
vec4 tex2 = texture2D(texture2, position);
float luma2 = (tex2.r + tex2.g + tex2.b)/3.0;
gl_FragColor = vec4(tex1.r, tex1.g, tex1.b, 1.0 - luma2);