jdkmidi class library documentation

Copyright © 2004 J.D. Koftinoff Software, Ltd.

Released under the GNU General Public License (GPL)




Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

include/jdkmidi/queue.h

Go to the documentation of this file.
00001 /*
00002  *  libjdkmidi-2004 C++ Class Library for MIDI
00003  *
00004  *  Copyright (C) 2004  J.D. Koftinoff Software, Ltd.
00005  *  www.jdkoftinoff.com
00006  *  jeffk@jdkoftinoff.com
00007  *
00008  *  *** RELEASED UNDER THE GNU GENERAL PUBLIC LICENSE (GPL) April 27, 2004 ***
00009  *
00010  *  This program is free software; you can redistribute it and/or modify
00011  *  it under the terms of the GNU General Public License as published by
00012  *  the Free Software Foundation; either version 2 of the License, or
00013  *  (at your option) any later version.
00014  *
00015  *  This program is distributed in the hope that it will be useful,
00016  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  *  GNU General Public License for more details.
00019  *
00020  *  You should have received a copy of the GNU General Public License
00021  *  along with this program; if not, write to the Free Software
00022  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00023 */
00024 #ifndef _JDKMIDI_QUEUE_H
00025 #define _JDKMIDI_QUEUE_H
00026 
00027 #include "jdkmidi/msg.h"
00028 #include "jdkmidi/sysex.h"
00029 
00030 namespace jdkmidi
00031 {
00032   
00033   class MIDIQueue
00034     {
00035     public:
00036       MIDIQueue( int num_msgs );
00037       virtual ~MIDIQueue();
00038       
00039       void Clear();
00040       
00041       bool CanPut() const;
00042       
00043       bool CanGet() const;
00044       
00045       bool IsFull() const 
00046         {
00047           return !CanPut();
00048         } 
00049       
00050       
00051       void Put( const MIDITimedBigMessage &msg ) 
00052         {
00053           buf[next_in] = msg;
00054           
00055           next_in = (next_in+1)%bufsize;
00056         } 
00057       
00058       MIDITimedBigMessage Get() const 
00059         {
00060           return MIDITimedBigMessage( buf[next_out] );
00061         } 
00062       
00063       void Next() 
00064         {
00065           next_out = (next_out+1) % bufsize;
00066         } 
00067       
00068       const MIDITimedBigMessage *Peek() const 
00069         {
00070           return &buf[next_out];
00071         } 
00072       
00073     protected:
00074       MIDITimedBigMessage *buf;
00075       int bufsize;
00076       volatile int next_in;
00077       volatile int next_out;
00078     };
00079   
00080 }
00081 
00082 #endif