> On Nov 1, 2015, at 7:40 PM, Darin Adler <da...@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]; }
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev