#ifndef DDS_SYSTEM_H
#define DDS_SYSTEM_H
#include <string>
#include <vector>
#include <array>
#include <api/dds.h>
using namespace std;
typedef void (*FduplType)(
const Boards& bds, vector<int>& uniques, vector<int>& crossrefs);
typedef void (*FcopyType)(const vector<int>& crossrefs);
class System
{
private:
int num_threads_;
int sys_mem_mb_;
unsigned preferred_system_;
vector<bool> available_system_;
public:
string get_version(
int& major,
int& minor,
int& patch) const;
string get_system(int& sys) const;
string get_bits(int& bits) const;
string get_compiler(int& comp) const;
int get_cores() const;
string get_constructor(int& cons) const;
string get_threading(int& thr) const;
int get_memory_max() const { return sys_mem_mb_; }
int get_num_threads() const { return num_threads_; }
System();
~System();
void reset();
int register_params(
const int n_threads,
const int mem_usable_mb);
void get_hardware(
int& core_count,
unsigned long long& kilobytes_free) const;
int prefer_threading(const unsigned code);
};
#endif