#include "Vector.h"

hpcxx_id_t CVectorSize_ID = 0;
hpcxx_id_t CVectorElementAt_ID = 0;

///////////////////////////////////////////////////////////////////////////////////
// Constructor
///////////////////////////////////////////////////////////////////////////////////
CVector::CVector(vector<FunctionInfo*> *func_db)
{
  m_FuncDB = func_db;
}

///////////////////////////////////////////////////////////////////////////////////
// Destroyer
///////////////////////////////////////////////////////////////////////////////////
CVector::~CVector()
{
  delete m_FuncDB;
}

/////////////////////////////////////////////////////////////////////////////////////
// Size
////////////////////////////////////////////////////////////////////////////////////
int CVector::Size()
{
  return m_FuncDB->size();
}

///////////////////////////////////////////////////////////////////////////////////
// CVector_RegisterMethods
//
// Register the CVector methods so there accessible throught HPC++ global pointers
///////////////////////////////////////////////////////////////////////////////////
int CVector::RegisterMethods(int start_reg_index)
{
  CVectorSize_ID = hpcxx_register(CVector::Size,start_reg_index++);
  CVectorElementAt_ID = hpcxx_register(CVector::ElementAt,start_reg_index++);
  return start_reg_index;
}

///////////////////////////////////////////////////////////////////////////////////
// ElementAt
//
// Returns the element at the specified index
///////////////////////////////////////////////////////////////////////////////////
FunctionInfo *CVector::ElementAt(int index)
{
  return (FunctionInfo*)((*m_FuncDB)[index]);
}

///////////////////////////////////////////////////////////////////////////////////
// CVector_RegisterClass
//
// Registers the CVector Class with HPC++.   This allows you to get a global pointer
// to an object in any context.  Then invoke methods on that object from outside that
// context.
/////////////////////////////////////////////////////////////////////////////////////
void CVector::RegisterClass() 
{
  hpcxx_registerClass((CVector *)NULL);
}

/////////////////////////////////////////////////////////////////////////////////////
// HPC++ Pack function for CVector
/////////////////////////////////////////////////////////////////////////////////////
void hpcxx_pack(HPCxx_Buffer b, CVector *data, int size)
{

}

/////////////////////////////////////////////////////////////////////////////////////
// HPC++ Unpack function for CVector
/////////////////////////////////////////////////////////////////////////////////////
void hpcxx_unpack(HPCxx_Buffer b, CVector *data, int size)
{

}



