#ifndef _SHARED_DATA_H
#define _SHARED_DATA_H

#include <vpr/IO/SerializableObject.h>
#include <vpr/IO/ObjectReader.h>
#include <vpr/IO/ObjectWriter.h>
#include <vpr/IO/BufferObjectReader.h>
#include <vpr/IO/BufferObjectWriter.h>
#include <plugins/ApplicationDataManager/UserData.h>

// sample siz= 16 floats
// midi event size = 9 ints

class SharedData : public vpr::SerializableObject
{
public:
   SharedData();
   virtual ~SharedData()
   {;}
   virtual vpr::ReturnStatus readObject(vpr::ObjectReader* reader);

   virtual vpr::ReturnStatus writeObject(vpr::ObjectWriter* writer);
public:
   void takeSnapshot(float* src);
   void takeEvent(int* src);

   void clear()
   {
      mSamples.clear();
      mEvents.clear();
   }

   unsigned int getNumSamples()
   {
      return mSamples.size();
   }

   unsigned int getNumEvents()
   {
      return mEvents.size();
   }

   void getRandomNumbers(int* nums);
   void generateRandomNumbers();
   
   void retrieveSample(float* dst, int num); 
   void retrieveEvent(int* dst, int num);

   std::vector< std::vector<float> > mSamples;
   std::vector< std::vector<int> > mEvents;

   vpr::Uint32 mRandomNumbers[16];

};

#endif

