## schroarith schroarith |

## Synopsis

    struct              SchroArith;
    struct              SchroArithContext;
    SchroArith *        schro_arith_new                     (void);
    void                schro_arith_free                    (SchroArith *arith);
    void                schro_arith_decode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);
    void                schro_arith_encode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);
    void                schro_arith_flush                   (SchroArith *arith);
    int                 schro_arith_decode_bit              (SchroArith *arith,
                                                             unsigned int context);
    void                schro_arith_decode_flush            (SchroArith *arith);
    int                 schro_arith_decode_sint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context,
                                                             unsigned int sign_context);
    int                 schro_arith_decode_uint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context);
    void                schro_arith_encode_bit              (SchroArith *arith,
                                                             int context,
                                                             int value);
    void                schro_arith_encode_sint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);
    void                schro_arith_encode_uint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);
    void                schro_arith_estimate_init           (SchroArith *arith);
    void                schro_arith_estimate_sint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);
    void                schro_arith_estimate_uint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);

## Description

## Details

### struct SchroArith

    struct SchroArith {
      SchroBuffer *buffer;
      uint8_t *dataptr;
      uintptr_t offset;

      uint32_t range[2];
      uint32_t code;
      uint32_t range_size;
      int cntr;
      int carry;

      uint16_t probabilities[SCHRO_CTX_LAST];
      uint16_t lut[512];
      SchroArithContext contexts[SCHRO_CTX_LAST];
    };

### struct SchroArithContext

    struct SchroArithContext {
      unsigned int next;
    #ifdef unused
      int stat_range;
      int n_bits;
      int n_symbols;
      int ones;
    #endif
    };

### schro_arith_new ()

    SchroArith *        schro_arith_new                     (void);

### schro_arith_free ()

    void                schro_arith_free                    (SchroArith *arith);

### schro_arith_decode_init ()

    void                schro_arith_decode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);

### schro_arith_encode_init ()

    void                schro_arith_encode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);

### schro_arith_flush ()

    void                schro_arith_flush                   (SchroArith *arith);

### schro_arith_decode_bit ()

    int                 schro_arith_decode_bit              (SchroArith *arith,
                                                             unsigned int context);

### schro_arith_decode_flush ()

    void                schro_arith_decode_flush            (SchroArith *arith);

### schro_arith_decode_sint ()

    int                 schro_arith_decode_sint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context,
                                                             unsigned int sign_context);

### schro_arith_decode_uint ()

    int                 schro_arith_decode_uint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context);

### schro_arith_encode_bit ()

    void                schro_arith_encode_bit              (SchroArith *arith,
                                                             int context,
                                                             int value);

### schro_arith_encode_sint ()

    void                schro_arith_encode_sint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);

### schro_arith_encode_uint ()

    void                schro_arith_encode_uint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);

### schro_arith_estimate_init ()

    void                schro_arith_estimate_init           (SchroArith *arith);

### schro_arith_estimate_sint ()

    void                schro_arith_estimate_sint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);

### schro_arith_estimate_uint ()

    void                schro_arith_estimate_uint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);