// record num list
#ifndef MULTI_DIM_ARRAY_H
#define MULTI_DIM_ARRAY_H

#include "xdart/x_at_file.h"

typedef uint term_val;

class loadMultiDimArray
{
public:
  loadMultiDimArray
    (AT_Write_Rand_File *f,
     uint num_dims);

  ~loadMultiDimArray
    ()
  {}
  
  void startDim
    (uint dim);

  void addNum
    (term_val n);

  void write
    ();

private:
  AT_Write_Rand_File *file;

  uint tot_dims;
  auto_array<uint64> header;
  uint64 header_pos;
};

//=============== readMultiDimArray ===============================================

class readMultiDimArray
{
public:
  readMultiDimArray
    (AT_Read_Rand_File *f);

  bool startDim
    (uint dim);

  term_val getNum
    ();

  uint count
    ()
    const
  { return cur_size / sizeof(term_val); };

private:
  AT_Read_Rand_File *file;
  
  uint tot_dims;

  uint cur_pos;
  uint cur_size;
  uint page_cnt;

  auto_array<uint64> header;

  enum {MAX_NUM_COUNT = 16384};
  enum {MAX_READ_SIZE = MAX_NUM_COUNT * sizeof(term_val)};
  
  byte buf[MAX_READ_SIZE];
};

#endif