lxconnection.h

00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Gav Wood                                        *
00003  *   gav@cs.york.ac.uk                                                     *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Library General Public License as       *
00007  *   published by the Free Software Foundation; either version 2 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  ***************************************************************************/
00010 
00011 #ifndef _GEDDEI_LXCONNECTION_H
00012 #define _GEDDEI_LXCONNECTION_H
00013 
00014 #ifdef __GEDDEI_BUILD
00015 #include "connection.h"
00016 #include "bufferdata.h"
00017 #include "signaltyperef.h"
00018 #else
00019 #include <geddei/connection.h>
00020 #include <geddei/bufferdata.h>
00021 #include <geddei/signaltyperef.h>
00022 #endif
00023 using namespace Geddei;
00024 
00025 namespace Geddei
00026 {
00027 
00028 class Source;
00029 
00046 class LxConnection: virtual public Connection, public ScratchOwner
00047 {
00048  friend class Processor;
00049  friend class DomProcessor;
00050  friend class Splitter;
00051 
00052  float *theScratch;
00053  uint theScratchSize;
00054  BufferID lastScratch;
00055 
00063  virtual void pushScratch(const BufferData &data);
00064 
00073  virtual void forgetScratch(const BufferData &data);
00074 
00079 
00094  virtual void pushPlunger() = 0;
00095 
00102  virtual const bool waitUntilReady() = 0;
00103 
00113  virtual void setType(const SignalType *type) = 0;
00114 
00119  virtual void resetType() = 0;
00120 
00125  virtual void sourceStopping() = 0;
00126 
00130  virtual void sourceStopped() = 0;
00131 
00135  virtual void reset() = 0;
00136 
00141  virtual void startPlungers() = 0;
00142  
00147  virtual void noMorePlungers() = 0;
00148  
00153  virtual void plungerSent() = 0;
00154  
00156 
00157 protected:
00158  Source *theSource;
00159  uint theSourceIndex;
00160 
00164  LxConnection(Source *source, const uint sourceIndex);
00165 
00175  virtual const uint maximumScratchElements(const uint minimum = 1) = 0;
00176 
00186  virtual const uint maximumScratchElementsEver() = 0;
00187 
00207  virtual BufferData makeScratchElements(const uint elements, bool autoPush = false);
00208 
00209 public:
00215  virtual const SignalTypeRef type() { return SignalTypeRef(theType); }
00216  
00231  virtual BufferData makeScratchSamples(const uint samples, bool autoPush = false);
00232 
00247  virtual BufferData makeScratchSample(bool autoPush = false) { return makeScratchSamples(1, autoPush); }
00248 
00263  virtual BufferData makeScratchSeconds(const float seconds, bool autoPush = false);
00264 
00280  virtual BufferData makeScratchSecond(bool autoPush = false) { return makeScratchSeconds(1., autoPush); }
00281 
00293  virtual void push(const BufferData &data) = 0;
00294 
00304  const uint maximumScratchSamples(const uint minimum = 1) { return maximumScratchElements(theType->elementsFromSamples(minimum)) == Undefined ? Undefined : theType->samples(maximumScratchElements(theType->elementsFromSamples(minimum))); }
00305 
00315  const uint maximumScratchSamplesEver() { return maximumScratchElementsEver() == Undefined ? Undefined : theType->samples(maximumScratchElementsEver()); }
00316 
00331  LxConnection &operator<<(const BufferData &data) { push(data); return *this; }
00332 
00347  BufferData operator+(const uint samples) { return makeScratchSamples(samples); }
00348 
00352  ~LxConnection();
00353 };
00354 
00355 }
00356 
00357 #endif

Generated on Fri Nov 10 21:58:26 2006 for Exscalibar by  doxygen 1.5.1