1 /*
2   MidiShare Project
3   Copyright (C) Grame 1999-2011
4 
5   This Source Code Form is subject to the terms of the Mozilla Public
6   License, v. 2.0. If a copy of the MPL was not distributed with this
7   file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9   Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10   research@grame.fr
11 */
12 
13 #include "MidiShareLight.h"
14 #include "msMemory.h"
15 #include "msEvents.h"
16 #include "msSeq.h"
17 
18 
19 /*******************************************************************************
20 * 						MidiShare Light reduced API
21 *******************************************************************************/
22 #define kVersion 1.0
23 #define kEventsChunkSize 4000
24 
25 //------------------------------------------------------------------------------
MidiLight(unsigned long memsize)26 MidiLight::MidiLight (unsigned long memsize) : fMemory (0)
27 {
28 	fMemory = new MSMemory (memsize);
29 }
30 
~MidiLight()31 MidiLight::~MidiLight ()
32 {
33 	delete fMemory;
34 }
35 
GetVersion(void)36 float MidiLight::GetVersion	(void)				{ return kVersion; }
37 
FreeSpace(void)38 unsigned long MidiLight::FreeSpace	(void)		{ return fMemory->FreeSpace(); }
TotalSpace(void)39 unsigned long MidiLight::TotalSpace (void)		{ return fMemory->TotalSpace(); }
GrowSpace(long n)40 unsigned long MidiLight::GrowSpace 	(long n)	{ return fMemory->GrowSpace(n); }
41 
42 //------------------------------------------------------------------------------
checkSpace(void)43 void MidiLight::checkSpace (void)	{ 	if (!fMemory->FreeSpace()) fMemory->GrowSpace (kEventsChunkSize); }
44 
45 //------------------------------------------------------------------------------
NewCell(void)46 MidiEvPtr MidiLight::NewCell 	(void)
47 {
48 	checkSpace();
49 	return MSNewCellFunction( fMemory->FreeList());
50 }
51 
FreeCell(MidiEvPtr e)52 void MidiLight::FreeCell (MidiEvPtr e)			{ MSFreeCellFunction (e, fMemory->FreeList()); }
53 
54 //------------------------------------------------------------------------------
NewEv(short typeNum)55 MidiEvPtr MidiLight::NewEv (short typeNum)
56 {
57 	checkSpace();
58 	return MSNewEv(typeNum, fMemory->FreeList());
59 }
60 
CopyEv(MidiEvPtr e)61 MidiEvPtr MidiLight::CopyEv (MidiEvPtr e)
62 {
63 	checkSpace();
64 	return MSCopyEv (e, fMemory->FreeList());
65 }
66 
FreeEv(MidiEvPtr e)67 void MidiLight::FreeEv (MidiEvPtr e)		{ MSFreeEv (e, fMemory->FreeList()); }
68 
69 //------------------------------------------------------------------------------
SetField(MidiEvPtr e,long f,long v)70 void MidiLight::SetField 	(MidiEvPtr e, long f, long v)	{ MSSetField(e, f, v); }
GetField(MidiEvPtr e,long f)71 long MidiLight::GetField 	(MidiEvPtr e, long f)			{ return MSGetField(e, f); }
AddField(MidiEvPtr e,long v)72 void MidiLight::AddField 	(MidiEvPtr e, long v)
73 {
74 	checkSpace();
75 	return MSAddField (e, v, fMemory->FreeList());
76 }
CountFields(MidiEvPtr e)77 long MidiLight::CountFields 	(MidiEvPtr e)					{ return MSCountFields(e); }
78 
79 //------------------------------------------------------------------------------
NewSeq(void)80 MidiSeqPtr MidiLight::NewSeq (void)
81 {
82 	checkSpace();
83 	return MSNewSeq (fMemory->FreeList());
84 }
AddSeq(MidiSeqPtr s,MidiEvPtr e)85 void MidiLight::AddSeq 	(MidiSeqPtr s, MidiEvPtr e)			{ MSAddSeq (s, e); }
FreeSeq(MidiSeqPtr s)86 void MidiLight::FreeSeq (MidiSeqPtr s)						{ MSFreeSeq (s, fMemory->FreeList()); }
ClearSeq(MidiSeqPtr s)87 void MidiLight::ClearSeq (MidiSeqPtr s)						{ MSClearSeq (s, fMemory->FreeList()); }
ApplySeq(MidiSeqPtr s,ApplyProcPtr proc)88 void MidiLight::ApplySeq (MidiSeqPtr s, ApplyProcPtr proc)	{ MSApplySeq (s, proc); }
89 
90