// N is the size of the array
// shift operators for NetBuffer and T must be defined
template <class T, size_t N>
class NetArray : public NetObject
{
T data[N];
protected:
virtual void netWrite (NetBuffer &nb) const
{ for(int i=0; i<N; ++i) nb << data[i]; }
virtual void netRead (NetBuffer &nb)
{ for(int i=0; i<N; ++i) nb >> data[i]; }
public:
operator T*() { return data; }
operator const T*() const { return data; }
NetArray () { netClear(); }
};
// T must inherit from NetObject
// C is the type of the counter
template <class T, class C=unsigned char>
class NetVector :
public NetObject,
public std::vector<T>
{
protected:
virtual void netWrite (NetBuffer &nb) const
{
C counter = size();
nb << counter;
const_iterator it = begin();
for(; it != end() ; ++it )
nb << (*it);
}
virtual void netRead (NetBuffer &nb)
{
C counter;
T item;
clear();
nb >> counter;
for(int i=0; i<counter; ++i)
{
nb >> item ;
push_back(item);
}
}
public:
explicit NetVector (size_t n=0) : std::vector<T>(n) {}
};
End of Listing