A class that converts byte streams into MIDI messages, and stores them in a FIFO. This is useful if you wish to read MIDI messages via polling instead of interrupts. The class supports every type of MIDI message, and System Realtime messages can be interleaved with regular ones.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MyBuffer.cpp Source File

MyBuffer.cpp

00001 
00002 /**
00003  * @file    Buffer.cpp
00004  * @brief   Software Buffer - Templated Ring Buffer for most data types
00005  * @author  sam grove
00006  * @version 1.0
00007  * @see     
00008  *
00009  * Copyright (c) 2013
00010  *
00011  * Licensed under the Apache License, Version 2.0 (the "License");
00012  * you may not use this file except in compliance with the License.
00013  * You may obtain a copy of the License at
00014  *
00015  *     http://www.apache.org/licenses/LICENSE-2.0
00016  *
00017  * Unless required by applicable law or agreed to in writing, software
00018  * distributed under the License is distributed on an "AS IS" BASIS,
00019  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00020  * See the License for the specific language governing permissions and
00021  * limitations under the License.
00022  */
00023  
00024 #include "MyBuffer.h"
00025 
00026 template <class T>
00027 MyBuffer<T>::MyBuffer(uint32_t size)
00028 {
00029     _buf = new T [size];
00030     _size = size;
00031     clear();
00032     
00033     return;
00034 }
00035 
00036 template <class T>
00037 MyBuffer<T>::~MyBuffer()
00038 {
00039     delete [] _buf;
00040     
00041     return;
00042 }
00043 
00044 template <class T>
00045 uint32_t MyBuffer<T>::getSize() 
00046 { 
00047     return this->_size; 
00048 }
00049 
00050 template <class T>
00051 void MyBuffer<T>::clear(void)
00052 {
00053     _wloc = 0;
00054     _rloc = 0;
00055     memset(_buf, 0, _size);
00056     
00057     return;
00058 }
00059 
00060 template <class T>
00061 uint32_t MyBuffer<T>::peek(char c)
00062 {
00063     return 1;
00064 }
00065 
00066 // make the linker aware of some possible types
00067 template class MyBuffer<uint8_t> ;
00068 template class MyBuffer<int8_t>;
00069 template class MyBuffer<uint16_t>;
00070 template class MyBuffer<int16_t>;
00071 template class MyBuffer<uint32_t>;
00072 template class MyBuffer<int32_t>;
00073 template class MyBuffer<uint64_t>;
00074 template class MyBuffer<int64_t>;
00075 template class MyBuffer<char>;
00076 template class MyBuffer<wchar_t>;