Basically the lines in question below are
queue[tail] = element;
vs.
memcpy(&queue[tail], &element, sizeof(T));
Is doing the first (queue[tail] = element) a valid way to do this? I have included a simple stupid example.
Code:
template <typename T>
class Stupid
{
protected:
T *queue;
uint16_t head;
uint16_t tail;
size_t numElements;
public:
Stupid(size_t numElements, size_t alignment) :
head(0), tail(0), numElements(numElements)
{
size_t size = sizeof(T)*numElements;
posix_memalign((void**)(&queue), alignment, size);
}
virtual int
enQueue(T &element)
{
//void *temp = &element;
queue[tail] = element;
//memcpy(&queue[tail], temp, sizeof(T));
tail++;
if (tail >= numElements)
tail = 0;
}
};