// C++ code Copyright (C) David R. Evans G4AMJ/NQ0I

#ifndef BINNEDEDRH
#define BINNEDEDRH

#include <iostream.h>
#include <stdio.h>

#include <defines.h>
#include <set.h>

// binned edr class

class GMDR;

class binned_edr
{ enum { array_size = 200 };

  byte* binned_record, *polarisation_record, *l_data, *r_data;

public:
  static float pseudo_watts[256];
  static boolean valid_data[256];

public:
  binned_edr(void);
  ~binned_edr(void);

  int operator=(const GMDR&);
  void operator=(const binned_edr&);

  inline byte bdatum(const int c) const
    { return binned_record[c - 1]; }
  inline byte pdatum(const int c) const
    { return polarisation_record[c - 1]; }
  inline byte ldatum(const int c) const
    { return l_data[c - 1]; }
  inline byte rdatum(const int c) const
    { return r_data[c - 1]; }

  inline void validate(const int n) 
    { valid_data[n] = true; }
  inline void invalidate(const int n)
    { valid_data[n] = false; }

  void write(FILE* fp);
  void read(FILE* fp);

  inline int size(void) const
    { return 4 * array_size; }

  friend ostream& operator<<(ostream&, binned_edr&);
};

#endif
