[webkit-dev] Proposal for serializing alpha channel values; request for algorithm help
Gavin Barraclough
barraclough at apple.com
Mon Nov 2 00:28:38 PST 2015
> On Nov 1, 2015, at 7:40 PM, Darin Adler <darin at apple.com> wrote:
>
> 3) Can you help me come up with a super-efficient algorithm to do this serialization?
Table lookup? FP conversion code is hard, and this is a relatively small number of strings.
You could also flatten all the strings into one big string, and take out a pointer indirection (below).
Data would add 1.5k to binary size, which is probably competitive to instruction space for an optimized implementation.
cheers,
G.
const char* unsignedCharToFloatString(unsigned char x)
{
return unsignedCharToFloatStrings[x];
}
static const char* unsignedCharToFloatStrings[256] = {
"0",
"0.003",
"0.007",
"0.01",
"0.015",
"0.019",
"0.023",
"0.027",
"0.03",
"0.035",
"0.039",
"0.043",
"0.047",
"0.05",
"0.054",
"0.058",
"0.062",
"0.066",
"0.07",
"0.074",
"0.078",
"0.082",
"0.086",
"0.09",
"0.094",
"0.098",
"0.1",
"0.105",
"0.109",
"0.113",
"0.117",
"0.12",
"0.125",
"0.129",
"0.133",
"0.137",
"0.14",
"0.145",
"0.149",
"0.152",
"0.156",
"0.16",
"0.164",
"0.168",
"0.172",
"0.176",
"0.18",
"0.184",
"0.188",
"0.192",
"0.196",
"0.2",
"0.203",
"0.207",
"0.21",
"0.215",
"0.219",
"0.223",
"0.227",
"0.23",
"0.235",
"0.239",
"0.243",
"0.247",
"0.25",
"0.254",
"0.258",
"0.262",
"0.266",
"0.27",
"0.274",
"0.278",
"0.282",
"0.286",
"0.29",
"0.294",
"0.298",
"0.3",
"0.305",
"0.309",
"0.313",
"0.317",
"0.32",
"0.325",
"0.329",
"0.333",
"0.337",
"0.34",
"0.345",
"0.349",
"0.352",
"0.356",
"0.36",
"0.364",
"0.368",
"0.372",
"0.376",
"0.38",
"0.384",
"0.388",
"0.392",
"0.396",
"0.4",
"0.403",
"0.407",
"0.41",
"0.415",
"0.419",
"0.423",
"0.427",
"0.43",
"0.435",
"0.439",
"0.443",
"0.447",
"0.45",
"0.454",
"0.458",
"0.462",
"0.466",
"0.47",
"0.474",
"0.478",
"0.482",
"0.486",
"0.49",
"0.494",
"0.498",
"0.5",
"0.505",
"0.509",
"0.513",
"0.517",
"0.52",
"0.525",
"0.529",
"0.533",
"0.537",
"0.54",
"0.545",
"0.549",
"0.552",
"0.556",
"0.56",
"0.564",
"0.568",
"0.572",
"0.576",
"0.58",
"0.584",
"0.588",
"0.592",
"0.596",
"0.6",
"0.603",
"0.607",
"0.61",
"0.615",
"0.619",
"0.623",
"0.627",
"0.63",
"0.635",
"0.639",
"0.643",
"0.647",
"0.65",
"0.654",
"0.658",
"0.662",
"0.666",
"0.67",
"0.674",
"0.678",
"0.682",
"0.686",
"0.69",
"0.694",
"0.698",
"0.7",
"0.705",
"0.709",
"0.713",
"0.717",
"0.72",
"0.725",
"0.729",
"0.733",
"0.737",
"0.74",
"0.745",
"0.749",
"0.752",
"0.756",
"0.76",
"0.764",
"0.768",
"0.772",
"0.776",
"0.78",
"0.784",
"0.788",
"0.792",
"0.796",
"0.8",
"0.803",
"0.807",
"0.81",
"0.815",
"0.819",
"0.823",
"0.827",
"0.83",
"0.835",
"0.839",
"0.843",
"0.847",
"0.85",
"0.854",
"0.858",
"0.862",
"0.866",
"0.87",
"0.874",
"0.878",
"0.882",
"0.886",
"0.89",
"0.894",
"0.898",
"0.9",
"0.905",
"0.909",
"0.913",
"0.917",
"0.92",
"0.925",
"0.929",
"0.933",
"0.937",
"0.94",
"0.945",
"0.949",
"0.952",
"0.956",
"0.96",
"0.964",
"0.968",
"0.972",
"0.976",
"0.98",
"0.984",
"0.988",
"0.992",
"0.996",
"1",
};
const char* unsignedCharToFloatStringSingleIndirection(unsigned char x)
{
return &"\x30\x00\x00\x00\x00\x00\x30\x2E\x30\x30\x33\x00\x30\x2E\x30\x30\x37\x00\x30\x2E\x30\x31\x00\x00\x30\x2E\x30\x31\x35\x00\x30\x2E\x30\x31\x39\x00\x30\x2E\x30\x32\x33\x00\x30\x2E\x30\x32\x37\x00\x30\x2E\x30\x33\x00\x00\x30\x2E\x30\x33\x35\x00\x30\x2E\x30\x33\x39\x00\x30\x2E\x30\x34\x33\x00\x30\x2E\x30\x34\x37\x00\x30\x2E\x30\x35\x00\x00\x30\x2E\x30\x35\x34\x00\x30\x2E\x30\x35\x38\x00\x30\x2E\x30\x36\x32\x00\x30\x2E\x30\x36\x36\x00\x30\x2E\x30\x37\x00\x00\x30\x2E\x30\x37\x34\x00\x30\x2E\x30\x37\x38\x00\x30\x2E\x30\x38\x32\x00\x30\x2E\x30\x38\x36\x00\x30\x2E\x30\x39\x00\x00\x30\x2E\x30\x39\x34\x00\x30\x2E\x30\x39\x38\x00\x30\x2E\x31\x00\x00\x00\x30\x2E\x31\x30\x35\x00\x30\x2E\x31\x30\x39\x00\x30\x2E\x31\x31\x33\x00\x30\x2E\x31\x31\x37\x00\x30\x2E\x31\x32\x00\x00\x30\x2E\x31\x32\x35\x00\x30\x2E\x31\x32\x39\x00\x30\x2E\x31\x33\x33\x00\x30\x2E\x31\x33\x37\x00\x30\x2E\x31\x34\x00\x00\x30\x2E\x31\x34\x35\x00\x30\x2E\x31\x34\x39\x00\x30\x2E\x31\x35\x32\x00\x30\x2E\x31\x35\x36\x00\x30\x2E\x31\x36\x00\x00\x30\x2E\x31\x36\x34\x00\x30\x2E\x31\x36\x38\x00\x30\x2E\x31\x37\x32\x00\x30\x2E\x31\x37\x36\x00\x30\x2E\x31\x38\x00\x00\x30\x2E\x31\x38\x34\x00\x30\x2E\x31\x38\x38\x00\x30\x2E\x31\x39\x32\x00\x30\x2E\x31\x39\x36\x00\x30\x2E\x32\x00\x00\x00\x30\x2E\x32\x30\x33\x00\x30\x2E\x32\x30\x37\x00\x30\x2E\x32\x31\x00\x00\x30\x2E\x32\x31\x35\x00\x30\x2E\x32\x31\x39\x00\x30\x2E\x32\x32\x33\x00\x30\x2E\x32\x32\x37\x00\x30\x2E\x32\x33\x00\x00\x30\x2E\x32\x33\x35\x00\x30\x2E\x32\x33\x39\x00\x30\x2E\x32\x34\x33\x00\x30\x2E\x32\x34\x37\x00\x30\x2E\x32\x35\x00\x00\x30\x2E\x32\x35\x34\x00\x30\x2E\x32\x35\x38\x00\x30\x2E\x32\x36\x32\x00\x30\x2E\x32\x36\x36\x00\x30\x2E\x32\x37\x00\x00\x30\x2E\x32\x37\x34\x00\x30\x2E\x32\x37\x38\x00\x30\x2E\x32\x38\x32\x00\x30\x2E\x32\x38\x36\x00\x30\x2E\x32\x39\x00\x00\x30\x2E\x32\x39\x34\x00\x30\x2E\x32\x39\x38\x00\x30\x2E\x33\x00\x00\x00\x30\x2E\x33\x30\x35\x00\x30\x2E\x33\x30\x39\x00\x30\x2E\x33\x31\x33\x00\x30\x2E\x33\x31\x37\x00\x30\x2E\x33\x32\x00\x00\x30\x2E\x33\x32\x35\x00\x30\x2E\x33\x32\x39\x00\x30\x2E\x33\x33\x33\x00\x30\x2E\x33\x33\x37\x00\x30\x2E\x33\x34\x00\x00\x30\x2E\x33\x34\x35\x00\x30\x2E\x33\x34\x39\x00\x30\x2E\x33\x35\x32\x00\x30\x2E\x33\x35\x36\x00\x30\x2E\x33\x36\x00\x00\x30\x2E\x33\x36\x34\x00\x30\x2E\x33\x36\x38\x00\x30\x2E\x33\x37\x32\x00\x30\x2E\x33\x37\x36\x00\x30\x2E\x33\x38\x00\x00\x30\x2E\x33\x38\x34\x00\x30\x2E\x33\x38\x38\x00\x30\x2E\x33\x39\x32\x00\x30\x2E\x33\x39\x36\x00\x30\x2E\x34\x00\x00\x00\x30\x2E\x34\x30\x33\x00\x30\x2E\x34\x30\x37\x00\x30\x2E\x34\x31\x00\x00\x30\x2E\x34\x31\x35\x00\x30\x2E\x34\x31\x39\x00\x30\x2E\x34\x32\x33\x00\x30\x2E\x34\x32\x37\x00\x30\x2E\x34\x33\x00\x00\x30\x2E\x34\x33\x35\x00\x30\x2E\x34\x33\x39\x00\x30\x2E\x34\x34\x33\x00\x30\x2E\x34\x34\x37\x00\x30\x2E\x34\x35\x00\x00\x30\x2E\x34\x35\x34\x00\x30\x2E\x34\x35\x38\x00\x30\x2E\x34\x36\x32\x00\x30\x2E\x34\x36\x36\x00\x30\x2E\x34\x37\x00\x00\x30\x2E\x34\x37\x34\x00\x30\x2E\x34\x37\x38\x00\x30\x2E\x34\x38\x32\x00\x30\x2E\x34\x38\x36\x00\x30\x2E\x34\x39\x00\x00\x30\x2E\x34\x39\x34\x00\x30\x2E\x34\x39\x38\x00\x30\x2E\x35\x00\x00\x00\x30\x2E\x35\x30\x35\x00\x30\x2E\x35\x30\x39\x00\x30\x2E\x35\x31\x33\x00\x30\x2E\x35\x31\x37\x00\x30\x2E\x35\x32\x00\x00\x30\x2E\x35\x32\x35\x00\x30\x2E\x35\x32\x39\x00\x30\x2E\x35\x33\x33\x00\x30\x2E\x35\x33\x37\x00\x30\x2E\x35\x34\x00\x00\x30\x2E\x35\x34\x35\x00\x30\x2E\x35\x34\x39\x00\x30\x2E\x35\x35\x32\x00\x30\x2E\x35\x35\x36\x00\x30\x2E\x35\x36\x00\x00\x30\x2E\x35\x36\x34\x00\x30\x2E\x35\x36\x38\x00\x30\x2E\x35\x37\x32\x00\x30\x2E\x35\x37\x36\x00\x30\x2E\x35\x38\x00\x00\x30\x2E\x35\x38\x34\x00\x30\x2E\x35\x38\x38\x00\x30\x2E\x35\x39\x32\x00\x30\x2E\x35\x39\x36\x00\x30\x2E\x36\x00\x00\x00\x30\x2E\x36\x30\x33\x00\x30\x2E\x36\x30\x37\x00\x30\x2E\x36\x31\x00\x00\x30\x2E\x36\x31\x35\x00\x30\x2E\x36\x31\x39\x00\x30\x2E\x36\x32\x33\x00\x30\x2E\x36\x32\x37\x00\x30\x2E\x36\x33\x00\x00\x30\x2E\x36\x33\x35\x00\x30\x2E\x36\x33\x39\x00\x30\x2E\x36\x34\x33\x00\x30\x2E\x36\x34\x37\x00\x30\x2E\x36\x35\x00\x00\x30\x2E\x36\x35\x34\x00\x30\x2E\x36\x35\x38\x00\x30\x2E\x36\x36\x32\x00\x30\x2E\x36\x36\x36\x00\x30\x2E\x36\x37\x00\x00\x30\x2E\x36\x37\x34\x00\x30\x2E\x36\x37\x38\x00\x30\x2E\x36\x38\x32\x00\x30\x2E\x36\x38\x36\x00\x30\x2E\x36\x39\x00\x00\x30\x2E\x36\x39\x34\x00\x30\x2E\x36\x39\x38\x00\x30\x2E\x37\x00\x00\x00\x30\x2E\x37\x30\x35\x00\x30\x2E\x37\x30\x39\x00\x30\x2E\x37\x31\x33\x00\x30\x2E\x37\x31\x37\x00\x30\x2E\x37\x32\x00\x00\x30\x2E\x37\x32\x35\x00\x30\x2E\x37\x32\x39\x00\x30\x2E\x37\x33\x33\x00\x30\x2E\x37\x33\x37\x00\x30\x2E\x37\x34\x00\x00\x30\x2E\x37\x34\x35\x00\x30\x2E\x37\x34\x39\x00\x30\x2E\x37\x35\x32\x00\x30\x2E\x37\x35\x36\x00\x30\x2E\x37\x36\x00\x00\x30\x2E\x37\x36\x34\x00\x30\x2E\x37\x36\x38\x00\x30\x2E\x37\x37\x32\x00\x30\x2E\x37\x37\x36\x00\x30\x2E\x37\x38\x00\x00\x30\x2E\x37\x38\x34\x00\x30\x2E\x37\x38\x38\x00\x30\x2E\x37\x39\x32\x00\x30\x2E\x37\x39\x36\x00\x30\x2E\x38\x00\x00\x00\x30\x2E\x38\x30\x33\x00\x30\x2E\x38\x30\x37\x00\x30\x2E\x38\x31\x00\x00\x30\x2E\x38\x31\x35\x00\x30\x2E\x38\x31\x39\x00\x30\x2E\x38\x32\x33\x00\x30\x2E\x38\x32\x37\x00\x30\x2E\x38\x33\x00\x00\x30\x2E\x38\x33\x35\x00\x30\x2E\x38\x33\x39\x00\x30\x2E\x38\x34\x33\x00\x30\x2E\x38\x34\x37\x00\x30\x2E\x38\x35\x00\x00\x30\x2E\x38\x35\x34\x00\x30\x2E\x38\x35\x38\x00\x30\x2E\x38\x36\x32\x00\x30\x2E\x38\x36\x36\x00\x30\x2E\x38\x37\x00\x00\x30\x2E\x38\x37\x34\x00\x30\x2E\x38\x37\x38\x00\x30\x2E\x38\x38\x32\x00\x30\x2E\x38\x38\x36\x00\x30\x2E\x38\x39\x00\x00\x30\x2E\x38\x39\x34\x00\x30\x2E\x38\x39\x38\x00\x30\x2E\x39\x00\x00\x00\x30\x2E\x39\x30\x35\x00\x30\x2E\x39\x30\x39\x00\x30\x2E\x39\x31\x33\x00\x30\x2E\x39\x31\x37\x00\x30\x2E\x39\x32\x00\x00\x30\x2E\x39\x32\x35\x00\x30\x2E\x39\x32\x39\x00\x30\x2E\x39\x33\x33\x00\x30\x2E\x39\x33\x37\x00\x30\x2E\x39\x34\x00\x00\x30\x2E\x39\x34\x35\x00\x30\x2E\x39\x34\x39\x00\x30\x2E\x39\x35\x32\x00\x30\x2E\x39\x35\x36\x00\x30\x2E\x39\x36\x00\x00\x30\x2E\x39\x36\x34\x00\x30\x2E\x39\x36\x38\x00\x30\x2E\x39\x37\x32\x00\x30\x2E\x39\x37\x36\x00\x30\x2E\x39\x38\x00\x00\x30\x2E\x39\x38\x34\x00\x30\x2E\x39\x38\x38\x00\x30\x2E\x39\x39\x32\x00\x30\x2E\x39\x39\x36\x00\x31"[(ptrdiff_t)x * 6];
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-dev/attachments/20151102/27a742df/attachment.html>
More information about the webkit-dev
mailing list