#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include <stdlib.h>
void uintprint3(uint32_t *a)
{
printf("%u %u %u\n", a
[0], a
[1], a
[2]); }
void uintprint4(uint32_t *a)
{
printf("%u %u %u %u\n", a
[0], a
[1], a
[2], a
[3]); }
void insert3(uint32_t in[static 3], uint32_t value, uint32_t out[static 4])
{
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 */
uint32_t tmp[13] = {value, in[0], in[1], in[2], value, in[0], in[1], value, in[2], in[0], value, in[1], in[2]};
uint8_t bits = ((value <= in[0]) << 2 ) | ((value <= in[1]) << 1) | (value <= in[2]);
static const uint8_t b[] =
{
[0b000] = 1,
[0b001] = 5,
[0b010] = 255,
[0b011] = 9,
[0b100] = 255,
[0b101] = 255,
[0b110] = 255,
[0b111] = 0
};
if (b[bits] > sizeof(tmp)/sizeof(uint32_t)) {
}
memcpy(out
, tmp
+ b
[bits
], 4*sizeof(uint32_t)); }
int main(void)
{
uint32_t a[] = {1, 3, 5};
printf("Input: "); uintprint3
(a
); uint32_t b[4]; insert3(a, 0, b); uintprint4(b);
uint32_t c[4]; insert3(a, 1, c); uintprint4(c);
uint32_t d[4]; insert3(a, 2, d); uintprint4(d);
uint32_t e[4]; insert3(a, 3, e); uintprint4(e);
uint32_t f[4]; insert3(a, 4, f); uintprint4(f);
uint32_t g[4]; insert3(a, 5, g); uintprint4(g);
uint32_t h[4]; insert3(a, 6, h); uintprint4(h);
uint32_t i[] = {5, 3, 1};
printf("Input: "); uintprint3
(i
); uint32_t j[4]; insert3(i, 2, j); uintprint4(j);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgdWludHByaW50Myh1aW50MzJfdCAqYSkKewogIHByaW50ZigiJXUgJXUgJXVcbiIsIGFbMF0sIGFbMV0sIGFbMl0pOwp9Cgp2b2lkIHVpbnRwcmludDQodWludDMyX3QgKmEpCnsKICBwcmludGYoIiV1ICV1ICV1ICV1XG4iLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTsKfQoKdm9pZCBpbnNlcnQzKHVpbnQzMl90IGluW3N0YXRpYyAzXSwgdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG91dFtzdGF0aWMgNF0pCnsKICAvKiAgICAgICAgICAgICAgICAgIDAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3ICAgICAgOCAgICAgIDkgICAgICAxMCAgICAgMTEgICAgIDEyICAgICovCiAgdWludDMyX3QgdG1wWzEzXSA9IHt2YWx1ZSwgaW5bMF0sIGluWzFdLCBpblsyXSwgdmFsdWUsIGluWzBdLCBpblsxXSwgdmFsdWUsIGluWzJdLCBpblswXSwgdmFsdWUsIGluWzFdLCBpblsyXX07CiAgdWludDhfdCBiaXRzID0gKCh2YWx1ZSA8PSBpblswXSkgPDwgMiApIHwgKCh2YWx1ZSA8PSBpblsxXSkgPDwgMSkgfCAodmFsdWUgPD0gaW5bMl0pOwogIHN0YXRpYyBjb25zdCB1aW50OF90IGJbXSA9CiAgewogICAgWzBiMDAwXSA9IDEsCiAgICBbMGIwMDFdID0gNSwKICAgIFswYjAxMF0gPSAyNTUsCiAgICBbMGIwMTFdID0gOSwKICAgIFswYjEwMF0gPSAyNTUsCiAgICBbMGIxMDFdID0gMjU1LAogICAgWzBiMTEwXSA9IDI1NSwKICAgIFswYjExMV0gPSAwCiAgfTsKICBpZiAoYltiaXRzXSA+IHNpemVvZih0bXApL3NpemVvZih1aW50MzJfdCkpIHsKICAgIHByaW50ZigiS2Frb2ogYmFnb3IgKSkpXG4iKTsKICAgIGV4aXQoLTEpOwogIH0KICBtZW1jcHkob3V0LCB0bXAgKyBiW2JpdHNdLCA0KnNpemVvZih1aW50MzJfdCkpOwp9CiAKaW50IG1haW4odm9pZCkKewogIHVpbnQzMl90IGFbXSA9IHsxLCAzLCA1fTsKICBwcmludGYoIklucHV0OiAiKTsgdWludHByaW50MyhhKTsKICBwcmludGYoIk91dHB1dDpcbiIpOwogIHVpbnQzMl90IGJbNF07IGluc2VydDMoYSwgMCwgYik7IHVpbnRwcmludDQoYik7CiAgdWludDMyX3QgY1s0XTsgaW5zZXJ0MyhhLCAxLCBjKTsgdWludHByaW50NChjKTsKICB1aW50MzJfdCBkWzRdOyBpbnNlcnQzKGEsIDIsIGQpOyB1aW50cHJpbnQ0KGQpOwogIHVpbnQzMl90IGVbNF07IGluc2VydDMoYSwgMywgZSk7IHVpbnRwcmludDQoZSk7CiAgdWludDMyX3QgZls0XTsgaW5zZXJ0MyhhLCA0LCBmKTsgdWludHByaW50NChmKTsKICB1aW50MzJfdCBnWzRdOyBpbnNlcnQzKGEsIDUsIGcpOyB1aW50cHJpbnQ0KGcpOwogIHVpbnQzMl90IGhbNF07IGluc2VydDMoYSwgNiwgaCk7IHVpbnRwcmludDQoaCk7CgogIHVpbnQzMl90IGlbXSA9IHs1LCAzLCAxfTsKICBwcmludGYoIklucHV0OiAiKTsgdWludHByaW50MyhpKTsKICBwcmludGYoIk91dHB1dDpcbiIpOwogIHVpbnQzMl90IGpbNF07IGluc2VydDMoaSwgMiwgaik7IHVpbnRwcmludDQoaik7CgogIHJldHVybiAwOwp9