| 11 | import static Zeze.Util.Json.*; |
| 12 | |
| 13 | public final class JsonWriter { |
| 14 | //@formatter:off |
| 15 | private static final long DOUBLE_SIGN_MASK = 0x8000_0000_0000_0000L; |
| 16 | private static final long DOUBLE_EXP_MASK = 0x7FF0_0000_0000_0000L; |
| 17 | private static final long DOUBLE_SIGNIFICAND_MASK = 0x000F_FFFF_FFFF_FFFFL; // low 52-bit |
| 18 | private static final long DOUBLE_HIDDEN_BIT = 0x0010_0000_0000_0000L; // 1e52 |
| 19 | private static final int DOUBLE_SIGNIFICAND_SIZE = 52; |
| 20 | private static final int DOUBLE_EXP_SIZE = 64 - DOUBLE_SIGNIFICAND_SIZE - 2; // 10 |
| 21 | private static final int DOUBLE_EXP_BIAS = 0x3FF + DOUBLE_SIGNIFICAND_SIZE; // 0x433 |
| 22 | |
| 23 | public static final int FLAG_PRETTY_FORMAT = 0x1; |
| 24 | public static final int FLAG_NO_QUOTE_KEY = 0x2; |
| 25 | public static final int FLAG_WRITE_NULL = 0x4; |
| 26 | public static final int FLAG_WRAP_ELEMENT = 0x8; // need FLAG_PRETTY_FORMAT |
| 27 | public static final int FLAG_ALL = 0xf; |
| 28 | public static final int FLAG_PRETTY_FORMAT_AND_WRAP_ELEMENT = FLAG_PRETTY_FORMAT | FLAG_WRAP_ELEMENT; |
| 29 | //@formatter:on |
| 30 | |
| 31 | private static final byte[] LONG_MIN_BYTES = "-9223372036854775808".getBytes(StandardCharsets.ISO_8859_1); |
| 32 | |
| 33 | private static final byte[] DIGITES_LUT = { // [200] |
| 34 | '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '1', |
| 35 | '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0', |
| 36 | '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '3', '0', '3', |
| 37 | '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1', |
| 38 | '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '5', '0', '5', '1', '5', |
| 39 | '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2', |
| 40 | '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', '7', '0', '7', '1', '7', '2', '7', |
| 41 | '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3', |
| 42 | '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0', '9', '1', '9', '2', '9', '3', '9', |
| 43 | '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'}; |
| 44 | |
| 45 | private static final long[] POW10 = { // [19] |
| 46 | 1, 10, 100, 1000, 1_0000, 10_0000, 100_0000, 1000_0000, 1_0000_0000, 10_0000_0000, 100_0000_0000L, |
| 47 | 1000_0000_0000L, 1_0000_0000_0000L, 10_0000_0000_0000L, 100_0000_0000_0000L, 1000_0000_0000_0000L, |
| 48 | 1_0000_0000_0000_0000L, 10_0000_0000_0000_0000L, 100_0000_0000_0000_0000L}; |
| 49 | |
| 50 | private static final long[] CACHED_POWERS_F = { |
| 51 | 0xfa8fd5a0_081c0288L, 0xbaaee17f_a23ebf76L, 0x8b16fb20_3055ac76L, |
| 52 | 0xcf42894a_5dce35eaL, 0x9a6bb0aa_55653b2dL, 0xe61acf03_3d1a45dfL, 0xab70fe17_c79ac6caL, |
| 53 | 0xff77b1fc_bebcdc4fL, 0xbe5691ef_416bd60cL, 0x8dd01fad_907ffc3cL, 0xd3515c28_31559a83L, |
| 54 | 0x9d71ac8f_ada6c9b5L, 0xea9c2277_23ee8bcbL, 0xaecc4991_4078536dL, 0x823c1279_5db6ce57L, |
| 55 | 0xc2109436_4dfb5637L, 0x9096ea6f_3848984fL, 0xd77485cb_25823ac7L, 0xa086cfcd_97bf97f4L, |
| 56 | 0xef340a98_172aace5L, 0xb23867fb_2a35b28eL, 0x84c8d4df_d2c63f3bL, 0xc5dd4427_1ad3cdbaL, |
| 57 | 0x936b9fce_bb25c996L, 0xdbac6c24_7d62a584L, 0xa3ab6658_0d5fdaf6L, 0xf3e2f893_dec3f126L, |
| 58 | 0xb5b5ada8_aaff80b8L, 0x87625f05_6c7c4a8bL, 0xc9bcff60_34c13053L, 0x964e858c_91ba2655L, |
| 59 | 0xdff97724_70297ebdL, 0xa6dfbd9f_b8e5b88fL, 0xf8a95fcf_88747d94L, 0xb9447093_8fa89bcfL, |
| 60 | 0x8a08f0f8_bf0f156bL, 0xcdb02555_653131b6L, 0x993fe2c6_d07b7facL, 0xe45c10c4_2a2b3b06L, |
| 61 | 0xaa242499_697392d3L, 0xfd87b5f2_8300ca0eL, 0xbce50864_92111aebL, 0x8cbccc09_6f5088ccL, |
| 62 | 0xd1b71758_e219652cL, 0x9c400000_00000000L, 0xe8d4a510_00000000L, 0xad78ebc5_ac620000L, |
| 63 | 0x813f3978_f8940984L, 0xc097ce7b_c90715b3L, 0x8f7e32ce_7bea5c70L, 0xd5d238a4_abe98068L, |
| 64 | 0x9f4f2726_179a2245L, 0xed63a231_d4c4fb27L, 0xb0de6538_8cc8ada8L, 0x83c7088e_1aab65dbL, |
| 65 | 0xc45d1df9_42711d9aL, 0x924d692c_a61be758L, 0xda01ee64_1a708deaL, 0xa26da399_9aef774aL, |
| 66 | 0xf209787b_b47d6b85L, 0xb454e4a1_79dd1877L, 0x865b8692_5b9bc5c2L, 0xc83553c5_c8965d3dL, |
| 67 | 0x952ab45c_fa97a0b3L, 0xde469fbd_99a05fe3L, 0xa59bc234_db398c25L, 0xf6c69a72_a3989f5cL, |
| 68 | 0xb7dcbf53_54e9beceL, 0x88fcf317_f22241e2L, 0xcc20ce9b_d35c78a5L, 0x98165af3_7b2153dfL, |
| 69 | 0xe2a0b5dc_971f303aL, 0xa8d9d153_5ce3b396L, 0xfb9b7cd9_a4a7443cL, 0xbb764c4c_a7a44410L, |
| 70 | 0x8bab8eef_b6409c1aL, 0xd01fef10_a657842cL, 0x9b10a4e5_e9913129L, 0xe7109bfb_a19c0c9dL, |
nothing calls this directly
no test coverage detected