#ifndef UPPERBAND_H_
#define UPPERBAND_H_

// TODO doc

#include <stdbool.h>
#include <stdio.h>

#include "obiblob.h"
#include "obiview.h"
#include "obidmscolumn.h"


typedef struct {
	unsigned char* table;      	// 4mer occurrence table built using the build_table function
	int32_t        over;        // count of 4mers with an occurrence greater than 255 (overflow)
} Kmer_table_t, *Kmer_table_p;


// TODO doc

Kmer_table_p hash_seq_column(Obiview_p view, OBIDMS_column_p seq_col, index_t seq_idx);
Kmer_table_p hash_two_seq_columns(Obiview_p view1, OBIDMS_column_p seq1_col, index_t seq1_idx,
								  Obiview_p view2, OBIDMS_column_p seq2_col, index_t seq2_idx);
void align_filters(Kmer_table_p ktable, Obi_blob_p seq1, Obi_blob_p seq2, index_t idx1, index_t idx2, double threshold, bool normalize, int reference, bool similarity_mode, double* score, int* LCSmin, bool can_be_identical);
void free_kmer_tables(Kmer_table_p ktable, size_t count);

#endif