// Common, groups Output and Encoding
// Copyright Alexander Liss
#include "color2.h"
#include "datacoder.h"
// Tint
int pack(CommBuffer& d, const Tint& z)
{
int g=0;
DataCoder coder;
coder.use(d);
g=coder.put(z.x1);
if(!g) g=coder.put(z.x2);
if(!g) g=coder.put(z.x3);
return g;
}
int unpack(Tint& z,const CommBuffer& s,ReadControl& c)
{
int g=0;
DataCoder coder;
coder.use(s,c);
g=coder.get(z.x1);
if(!g) g=coder.get(z.x2);
if(!g) g=coder.get(z.x3);
return g;
}
// Color
int pack(CommBuffer& d,const Color& z)
{
int g=0;
DataCoder coder;
coder.use(d);
g=pack(d,static_cast<Tint>(z));
if(!g) g=coder.put(z.x4);
return g;
}
int unpack(Color& z,const CommBuffer& s,ReadControl& c)
{
int g=0;
DataCoder coder;
coder.use(s,c);
g=unpack(static_cast<Tint>(z),s,c);
if(!g) g=coder.get(z.x4);
return g;
}
// Stain
int pack(CommBuffer& d,const Stain& z)
{
int g=0;
DataCoder coder;
coder.use(d);
g=coder.put(z.x1);
if(!g) g=coder.put(z.x2);
if(!g) g=coder.put(z.x3);
return g;
}
int unpack(Stain& z,const CommBuffer& s,ReadControl& c)
{
int g=0;
DataCoder coder;
coder.use(s,c);
g=coder.get(z.x1);
if(!g) g=coder.get(z.x2);
if(!g) g=coder.get(z.x3);
return g;
}
// RandomColor
int pack(CommBuffer& d, const RandomColor& z)
{
int g=0;
DataCoder coder;
coder.use(d);
g=pack(d,z.sum);
if(!g) g=pack(d,z.units.size());
for(int i=0;i<z.units.size();++i)
{
if(!g) g=pack(d,z.units[i].c);
if(!g) g=pack(d,z.units[i].p);
}
return g;
}
int unpack(RandomColor& z,const CommBuffer& s,ReadControl& c)
{
int g=0;
DataCoder coder;
coder.use(s,c);
z.clear();
g=unpack(z.sum,s,c);
int size=0;
g=unpack(size,s,c);
z.units.set_size(size);
for(int i=0;i<size;++i)
{
if(!g) g=unpack(z.units[i].c,s,c);
if(!g) g=unpack(z.units[i].p,s,c);
}
return g;
}