> 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?
Oh – I guess if you just store the fractions as BCD & unpack you can get the table size down to 512 bytes. If you decide against truncating the values & still want to store 6 digits of precision you could do so in a 1K table (and should be faster serialization than normal float to ASCII conversion). cheers, G. void unsignedCharToFloatString(unsigned char x, char* out) { unsigned short data = unsignedCharToFloatData[x]; if (data > 1) { *out++ = '0'; *out++ = '.'; for (unsigned i = 0; i < 4; ++i) { unsigned value = (data >> 12) & 0xf; if (value != 0xf) *out++ = '0' + value; data <<= 4; } } else *out++ = '0' + data; *out = '\0'; return; } static const unsigned short unsignedCharToFloatData[256] = { 0, 0xf003, 0xf007, 0xff01, 0xf015, 0xf019, 0xf023, 0xf027, 0xff03, 0xf035, 0xf039, 0xf043, 0xf047, 0xff05, 0xf054, 0xf058, 0xf062, 0xf066, 0xff07, 0xf074, 0xf078, 0xf082, 0xf086, 0xff09, 0xf094, 0xf098, 0xfff1, 0xf105, 0xf109, 0xf113, 0xf117, 0xff12, 0xf125, 0xf129, 0xf133, 0xf137, 0xff14, 0xf145, 0xf149, 0xf152, 0xf156, 0xff16, 0xf164, 0xf168, 0xf172, 0xf176, 0xff18, 0xf184, 0xf188, 0xf192, 0xf196, 0xfff2, 0xf203, 0xf207, 0xff21, 0xf215, 0xf219, 0xf223, 0xf227, 0xff23, 0xf235, 0xf239, 0xf243, 0xf247, 0xff25, 0xf254, 0xf258, 0xf262, 0xf266, 0xff27, 0xf274, 0xf278, 0xf282, 0xf286, 0xff29, 0xf294, 0xf298, 0xfff3, 0xf305, 0xf309, 0xf313, 0xf317, 0xff32, 0xf325, 0xf329, 0xf333, 0xf337, 0xff34, 0xf345, 0xf349, 0xf352, 0xf356, 0xff36, 0xf364, 0xf368, 0xf372, 0xf376, 0xff38, 0xf384, 0xf388, 0xf392, 0xf396, 0xfff4, 0xf403, 0xf407, 0xff41, 0xf415, 0xf419, 0xf423, 0xf427, 0xff43, 0xf435, 0xf439, 0xf443, 0xf447, 0xff45, 0xf454, 0xf458, 0xf462, 0xf466, 0xff47, 0xf474, 0xf478, 0xf482, 0xf486, 0xff49, 0xf494, 0xf498, 0xfff5, 0xf505, 0xf509, 0xf513, 0xf517, 0xff52, 0xf525, 0xf529, 0xf533, 0xf537, 0xff54, 0xf545, 0xf549, 0xf552, 0xf556, 0xff56, 0xf564, 0xf568, 0xf572, 0xf576, 0xff58, 0xf584, 0xf588, 0xf592, 0xf596, 0xfff6, 0xf603, 0xf607, 0xff61, 0xf615, 0xf619, 0xf623, 0xf627, 0xff63, 0xf635, 0xf639, 0xf643, 0xf647, 0xff65, 0xf654, 0xf658, 0xf662, 0xf666, 0xff67, 0xf674, 0xf678, 0xf682, 0xf686, 0xff69, 0xf694, 0xf698, 0xfff7, 0xf705, 0xf709, 0xf713, 0xf717, 0xff72, 0xf725, 0xf729, 0xf733, 0xf737, 0xff74, 0xf745, 0xf749, 0xf752, 0xf756, 0xff76, 0xf764, 0xf768, 0xf772, 0xf776, 0xff78, 0xf784, 0xf788, 0xf792, 0xf796, 0xfff8, 0xf803, 0xf807, 0xff81, 0xf815, 0xf819, 0xf823, 0xf827, 0xff83, 0xf835, 0xf839, 0xf843, 0xf847, 0xff85, 0xf854, 0xf858, 0xf862, 0xf866, 0xff87, 0xf874, 0xf878, 0xf882, 0xf886, 0xff89, 0xf894, 0xf898, 0xfff9, 0xf905, 0xf909, 0xf913, 0xf917, 0xff92, 0xf925, 0xf929, 0xf933, 0xf937, 0xff94, 0xf945, 0xf949, 0xf952, 0xf956, 0xff96, 0xf964, 0xf968, 0xf972, 0xf976, 0xff98, 0xf984, 0xf988, 0xf992, 0xf996, 1 };
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev