7df6e18265341f87a69fba808aa1f92f8ebca841 markd Wed Apr 15 13:39:42 2026 -0700 move copy of htslib diff --git src/htslib/cram/cram_codecs.h src/htslib/cram/cram_codecs.h deleted file mode 100644 index b237c19569c..00000000000 --- src/htslib/cram/cram_codecs.h +++ /dev/null @@ -1,194 +0,0 @@ -/* -Copyright (c) 2012-2013 Genome Research Ltd. -Author: James Bonfield - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - - 3. Neither the names Genome Research Ltd and Wellcome Trust Sanger -Institute nor the names of its contributors may be used to endorse or promote -products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY GENOME RESEARCH LTD AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL GENOME RESEARCH LTD OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _CRAM_ENCODINGS_H_ -#define _CRAM_ENCODINGS_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct cram_codec; - -/* - * Slow but simple huffman decoder to start with. - * Read a bit at a time, keeping track of {length, value} - * eg. 1 1 0 1 => {1,1}, {2,3}, {3,6}, {4,13} - * - * Keep track of this through the huffman code table. - * For fast scanning we have an index of where the first code of length X - * appears. - */ -typedef struct { - int32_t symbol; - int32_t p; // next code start value, minus index to codes[] - int32_t code; - int32_t len; -} cram_huffman_code; - -typedef struct { - int ncodes; - cram_huffman_code *codes; -} cram_huffman_decoder; - -#define MAX_HUFF 128 -typedef struct { - cram_huffman_code *codes; - int nvals; - int val2code[MAX_HUFF+1]; // value to code lookup for small values -} cram_huffman_encoder; - -typedef struct { - int32_t offset; - int32_t nbits; -} cram_beta_decoder; - -typedef struct { - int32_t offset; -} cram_gamma_decoder; - -typedef struct { - int32_t offset; - int32_t k; -} cram_subexp_decoder; - -typedef struct { - int32_t content_id; - enum cram_external_type type; -} cram_external_decoder; - -typedef struct { - struct cram_codec *len_codec; - struct cram_codec *val_codec; -} cram_byte_array_len_decoder; - -typedef struct { - unsigned char stop; - int32_t content_id; -} cram_byte_array_stop_decoder; - -typedef struct { - enum cram_encoding len_encoding; - enum cram_encoding val_encoding; - void *len_dat; - void *val_dat; - struct cram_codec *len_codec; - struct cram_codec *val_codec; -} cram_byte_array_len_encoder; - -/* - * A generic codec structure. - */ -typedef struct cram_codec { - enum cram_encoding codec; - cram_block *out; - void (*free)(struct cram_codec *codec); - int (*decode)(cram_slice *slice, struct cram_codec *codec, - cram_block *in, char *out, int *out_size); - int (*encode)(cram_slice *slice, struct cram_codec *codec, - char *in, int in_size); - int (*store)(struct cram_codec *codec, cram_block *b, char *prefix, - int version); - union { - cram_huffman_decoder huffman; - cram_external_decoder external; - cram_beta_decoder beta; - cram_gamma_decoder gamma; - cram_subexp_decoder subexp; - cram_byte_array_len_decoder byte_array_len; - cram_byte_array_stop_decoder byte_array_stop; - - cram_huffman_encoder e_huffman; - cram_external_decoder e_external; - cram_byte_array_stop_decoder e_byte_array_stop; - cram_byte_array_len_encoder e_byte_array_len; - cram_beta_decoder e_beta; - }; -} cram_codec; - -char *cram_encoding2str(enum cram_encoding t); - -cram_codec *cram_decoder_init(enum cram_encoding codec, char *data, int size, - enum cram_external_type option, - int version); -cram_codec *cram_encoder_init(enum cram_encoding codec, cram_stats *st, - enum cram_external_type option, void *dat, - int version); - -//int cram_decode(void *codes, char *in, int in_size, char *out, int *out_size); -//void cram_decoder_free(void *codes); - -//#define GET_BIT_MSB(b,v) (void)(v<<=1, v|=(b->data[b->byte] >> b->bit)&1, (--b->bit == -1) && (b->bit = 7, b->byte++)) - -#define GET_BIT_MSB(b,v) (void)(v<<=1, v|=(b->data[b->byte] >> b->bit)&1, b->byte += (--b->bit<0), b->bit&=7) - -/* - * Check that enough bits are left in a block to satisy a bit-based decoder. - * Return 0 if there are enough - * 1 if not. - */ - -static inline int cram_not_enough_bits(cram_block *blk, int nbits) { - if (nbits < 0 || - (blk->byte >= blk->uncomp_size && nbits > 0) || - (blk->uncomp_size - blk->byte <= INT32_MAX / 8 + 1 && - (blk->uncomp_size - blk->byte) * 8 + blk->bit - 7 < nbits)) { - return 1; - } - return 0; -} - -/* - * Returns the content_id used by this codec, also in id2 if byte_array_len. - * Returns -1 for the CORE block and -2 for unneeded. - * id2 is only filled out for BYTE_ARRAY_LEN which uses 2 codecs. - */ -int cram_codec_to_id(cram_codec *c, int *id2); - -/* - * cram_codec structures are specialised for decoding or encoding. - * Unfortunately this makes turning a decoder into an encoder (such as - * when transcoding files) problematic. - * - * This function converts a cram decoder codec into an encoder version - * in-place (ie it modifiers the codec itself). - * - * Returns 0 on success; - * -1 on failure. - */ -int cram_codec_decoder2encoder(cram_fd *fd, cram_codec *c); - -#ifdef __cplusplus -} -#endif - -#endif /* _CRAM_ENCODINGS_H_ */