// Common, groups Output and Encoding
// Copyright Alexander Liss


#include "sound2.h"
#include "shape2.h"
#include "array2.h"



	// SoundSamples


int pack(CommBuffer& d,const SoundSamples& z)
{
	int g=0;
	DataCoder coder;
	coder.use(d);

			g=::pack(d,z.samples);
	if(!g)	g=coder.put(z.period);
	if(!g)	g=coder.put(z.carrier);

	return g;
}

int unpack(SoundSamples& z,const CommBuffer& s,ReadControl& c)
{
	int g=0;
	DataCoder coder;
	coder.use(s,c);

			g=::unpack(z.samples,s,c);
	if(!g)	g=coder.get(z.period);
	if(!g)	g=coder.get(z.carrier);

	return g;
}


	// SoundAccordUnit


int pack(CommBuffer& d,const SoundAccordUnit& z)
{
	int g=0;
	DataCoder coder;
	coder.use(d);

	g=::pack(d,z.samples);
	if(!g)	g=::pack(d,z.vibro);
	if(!g)	g=coder.put(z.vigor);

	return g;
}

int unpack(SoundAccordUnit& z,const CommBuffer& s,ReadControl& c)
{
	int g=0;
	DataCoder coder;
	coder.use(s,c);

	g=::unpack(z.samples,s,c);
	if(!g)	g=::unpack(z.vibro,s,c);
	if(!g)	g=coder.get(z.vigor);

	return g;
}


	// CosinSound


int pack(CommBuffer& d,const CosinSound& z)
{
	int g=0;
	DataCoder coder;
	coder.use(d);

			g=coder.put(z.vigor);
	if(!g)	g=coder.put(z.period);
	if(!g)	g=coder.put(z.phase);
	if(!g)	g=::pack(d,z.vibro);

	return g;
}

int unpack(CosinSound& z,const CommBuffer& s,ReadControl& c)
{
	int g=0;
	DataCoder coder;
	coder.use(s,c);

			g=coder.get(z.vigor);
	if(!g)	g=coder.get(z.period);
	if(!g)	g=coder.get(z.phase);
	if(!g)	g=::unpack(z.vibro,s,c);

	return g;
}


	// CosinSoundAccordUnit


int pack(CommBuffer& d,const CosinSoundAccordUnit& z)
{
	int g=0;
	DataCoder coder;
	coder.use(d);

			g=coder.put(z.n);
	if(!g)	g=coder.put(z.m);
	if(!g)	g=::pack(d,z.vibro);
	if(!g)	g=coder.put(z.vigor);

	return g;
}

int unpack(CosinSoundAccordUnit& z,const CommBuffer& s,ReadControl& c)
{
	int g=0;
	DataCoder coder;
	coder.use(s,c);

			g=coder.get(z.n);
	if(!g)	g=coder.get(z.m);
	if(!g)	g=::unpack(z.vibro,s,c);
	if(!g)	g=coder.get(z.vigor);

	return g;
}


	// CosinSoundAccord


int pack(CommBuffer& d,const CosinSoundAccord& z)
{
	int g=0;
	DataCoder coder;
	coder.use(d);

	g=::pack(d,z.units);
	if(!g)	g=coder.put(z.period);
	if(!g)	g=coder.put(z.phase);

	return g;
}

int unpack(CosinSoundAccord& z,const CommBuffer& s,ReadControl& c)
{
	int g=0;
	DataCoder coder;
	coder.use(s,c);

	g=::unpack(z.units,s,c);
	if(!g)	g=coder.get(z.period);
	if(!g)	g=coder.get(z.phase);

	return g;
}