/* 疎行列を扱うためのコード */
#ifndef _matrix_h_included_
#define _matrix_h_included_

struct matrix_image {
  /* number of 'int elements */
  int size;
  /* array of 'int */
  int *image;
};

struct sparse_matrix;
struct sparse_array;

/* 行列を構成するAPI */
struct sparse_matrix *anthy_sparse_matrix_new(void);
void anthy_sparse_matrix_set(struct sparse_matrix *m, int row, int column,
			     int value, void *ptr);
int anthy_sparse_matrix_get_int(struct sparse_matrix *m, int row, int column);
void anthy_sparse_matrix_make_matrix(struct sparse_matrix *m);
/* 行列イメージを構築するAPI(配列はhost byte order) */
struct matrix_image *anthy_matrix_image_new(struct sparse_matrix *s);
/* 行列イメージにアクセスするAPI(配列はnetwork byte order) */
int anthy_matrix_image_peek(int *im, int row, int col);

#endif
