19 BEGIN_NAMESPACE_MEMORY
34 virtual std::recursive_mutex&
getLock() = 0;
49 virtual size_t readSamples(T* samples,
size_t samplesCount,
bool incrementPosition =
true) = 0;
72 virtual std::recursive_mutex&
getLock() = 0;
87 virtual size_t writeSamples(
const T* samples,
size_t samplesCount,
bool incrementPosition =
true) = 0;
103 template <
typename T>
117 template <
typename T,
typename Locking = UseLock>
120 bool incrementPosition =
true,
121 size_t samplesCount = (std::numeric_limits<size_t>::max)())
127 T* data =
new T[samplesCount];
128 source.
readSamples(data, samplesCount, incrementPosition);
129 target.
writeSamples(data, samplesCount, incrementPosition);
143 template <
typename S,
typename T>
146 bool incrementPosition =
true,
147 size_t samplesCount = (std::numeric_limits<size_t>::max)())
149 std::lock_guard<std::recursive_mutex> guardS(source.
getLock());
150 std::lock_guard<std::recursive_mutex> guardT(target.
getLock());
152 assert(
sizeof(S) %
sizeof(T) == 0 ||
sizeof(T) %
sizeof(S) == 0);
154 size_t fS = (
sizeof(S) >
sizeof(T)) ?
sizeof(S) /
sizeof(T) : 1;
155 size_t fT = (
sizeof(S) <
sizeof(T)) ?
sizeof(T) /
sizeof(S) : 1;
157 samplesCount = std::min<size_t>(std::min<size_t>(samplesCount, source.
getSize() / fT), target.
getRemainingSize() / fS);
159 std::unique_ptr<T[]> data(
new T[samplesCount * fS]);
160 source.
readSamples((S*) data.get(), samplesCount * fT, incrementPosition);
161 target.
writeSamples(data.get(), samplesCount * fS, incrementPosition);
virtual void incrementReadPosition(size_t pos)=0
Function increments read position for N samples.
virtual std::recursive_mutex & getLock()=0
Function return locking object.
Basic source buffer interface.
Definition: buffer.h:25
std::lock_guard with compile time option to ignore locking
size_t transferBuffer(ISourceBuffer< T > &source, ITargetBuffer< T > &target, bool incrementPosition=true, size_t samplesCount=(std::numeric_limits< size_t >::max)())
Transferring data from one buffer to another.
Definition: buffer.h:118
Definition: lock_guard.h:29
virtual size_t getRemainingSize()=0
Function returns remaining size in samples.
virtual size_t getSize()=0
Function returns current buffer size in samples.
virtual void incrementWritePosition(size_t pos)=0
Function increments write position for N samples.
virtual size_t writeSamples(const T *samples, size_t samplesCount, bool incrementPosition=true)=0
Function pushes the samples into buffer.
virtual std::recursive_mutex & getLock()=0
Function return locking object.
virtual size_t readSamples(T *samples, size_t samplesCount, bool incrementPosition=true)=0
Function reads the samples from buffer.
Basic target buffer interface.
Definition: buffer.h:63