-INLINE_HEADER void
-decoding_table_put_char (Lisp_Object ccs,
- int code_point, Lisp_Object character)
-{
-#if 1
- Lisp_Object table1 = XCHARSET_DECODING_TABLE (ccs);
- int dim = XCHARSET_DIMENSION (ccs);
-
- if (dim == 1)
- XCHARSET_DECODING_TABLE (ccs)
- = put_ccs_octet_table (table1, ccs, code_point, character);
- else if (dim == 2)
- {
- Lisp_Object table2
- = get_ccs_octet_table (table1, ccs, (unsigned char)(code_point >> 8));
-
- table2 = put_ccs_octet_table (table2, ccs,
- (unsigned char)code_point, character);
- XCHARSET_DECODING_TABLE (ccs)
- = put_ccs_octet_table (table1, ccs,
- (unsigned char)(code_point >> 8), table2);
- }
- else if (dim == 3)
- {
- Lisp_Object table2
- = get_ccs_octet_table (table1, ccs, (unsigned char)(code_point >> 16));
- Lisp_Object table3
- = get_ccs_octet_table (table2, ccs, (unsigned char)(code_point >> 8));
-
- table3 = put_ccs_octet_table (table3, ccs,
- (unsigned char)code_point, character);
- table2 = put_ccs_octet_table (table2, ccs,
- (unsigned char)(code_point >> 8), table3);
- XCHARSET_DECODING_TABLE (ccs)
- = put_ccs_octet_table (table1, ccs,
- (unsigned char)(code_point >> 16), table2);
- }
- else /* if (dim == 4) */
- {
- Lisp_Object table2
- = get_ccs_octet_table (table1, ccs, (unsigned char)(code_point >> 24));
- Lisp_Object table3
- = get_ccs_octet_table (table2, ccs, (unsigned char)(code_point >> 16));
- Lisp_Object table4
- = get_ccs_octet_table (table3, ccs, (unsigned char)(code_point >> 8));
-
- table4 = put_ccs_octet_table (table4, ccs,
- (unsigned char)code_point, character);
- table3 = put_ccs_octet_table (table3, ccs,
- (unsigned char)(code_point >> 8), table4);
- table2 = put_ccs_octet_table (table2, ccs,
- (unsigned char)(code_point >> 16), table3);
- XCHARSET_DECODING_TABLE (ccs)
- = put_ccs_octet_table (table1, ccs,
- (unsigned char)(code_point >> 24), table2);
- }
-#else
- Lisp_Object v = XCHARSET_DECODING_TABLE (ccs);
- int dim = XCHARSET_DIMENSION (ccs);
- int byte_offset = XCHARSET_BYTE_OFFSET (ccs);
- int i = -1;
- Lisp_Object nv;
- int ccs_len = XVECTOR_LENGTH (v);
-
- while (dim > 0)
- {
- dim--;
- i = ((code_point >> (8 * dim)) & 255) - byte_offset;
- nv = XVECTOR_DATA(v)[i];
- if (dim > 0)
- {
- if (!VECTORP (nv))
- {
- if (EQ (nv, character))
- return;
- else
- nv = (XVECTOR_DATA(v)[i] = make_vector (ccs_len, Qnil));
- }
- v = nv;
- }
- else
- break;
- }
- XVECTOR_DATA(v)[i] = character;
-#endif
-}