#ifndef INDEX_H
#define INDEX_H

#include "definitions.h"

struct index {
     int window_size;
     int dimensions;
     int num_boxes;
     int box_capacity;
     size_t memory_usage;
     MBR *elements;
};

int file_length(FILE *input);
int statistics(const char *inputfname);
void create_index_file(FILE *input, FILE *output, int window_size, 
		       int box_capacity);
void create_index_volume(FILE *input, FILE *output, int window_size, 
			 double max_volume);
void create_index_density_nolookahead(FILE *input, FILE *output,
				      int window_size, double min_density);
void create_index_density_lookahead(FILE *input, FILE *output, int window_size, 
				    int max_density);

struct index *read_index(const char *filename);
void store_index(const struct index *index, FILE *output);
struct index *index_dup(const struct index *oldindex);
void index_grow(struct index *index, int growth);
void free_index(struct index *index);

#endif
