#ifndef __CUDA_HMM_H__
#define __CUDA_HMM_H__

struct cuda_gm
{
  float *mean;
  float *ichol;
  float gc;
};

struct cuda_hmmmodel
{
  float *A;        ///< transition matirx
  float *pi;       ///< emission matrix
  cuda_gm *gms;    ///< gaussian models
  int numstates;   ///< number of states
  int featuresize; ///< vector size
};

/// training sequence in gpu memory
struct cuda_sequence
{
  float *time_series;
  float *data_probs   ///< data point probilities

  int numsamples;
};

struct cuda_train_set
{
  cuda_sequence **seqs;
  int size;
  int featuresize;
};

/// training sequence in cpu memory
struct cuda_cpu_seq
{
  float *time_series;

  float *data_probs;       ///< alpha matrix

  int numsamples;
  int featuresize;
};

#endif
