From a16db0ee59fe8d28d092b5394d6c29deb468029f Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Wed, 11 Jul 2001 23:30:24 +0000 Subject: [PATCH] optimized word pop --- src/ca/virtualCircuit.h | 48 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/ca/virtualCircuit.h b/src/ca/virtualCircuit.h index d427cbe62..17639d31d 100644 --- a/src/ca/virtualCircuit.h +++ b/src/ca/virtualCircuit.h @@ -126,7 +126,7 @@ public: comQueRecv (); ~comQueRecv (); unsigned occupiedBytes () const; - unsigned copyOutBytes ( void *pBuf, unsigned nBytes ); + unsigned copyOutBytes ( epicsInt8 *pBuf, unsigned nBytes ); unsigned removeBytes ( unsigned nBytes ); void pushLastComBufReceived ( comBuf & ); void clear (); @@ -139,15 +139,15 @@ public: epicsFloat32 popFloat32 (); epicsFloat64 popFloat64 (); void popString ( epicsOldString * ); - class insufficentBytesAvailable {}; private: tsDLList < comBuf > bufs; + unsigned nBytesPending; }; class tcpRecvWatchdog : private epicsTimerNotify { public: - tcpRecvWatchdog ( tcpiiu &, double periodIn, epicsTimerQueue & queueIn ); + tcpRecvWatchdog ( tcpiiu &, double periodIn, epicsTimerQueue & ); virtual ~tcpRecvWatchdog (); void rescheduleRecvTimer (); void sendBacklogProgressNotify (); @@ -159,7 +159,8 @@ public: void show ( unsigned level ) const; private: const double period; - epicsTimer &timer; + epicsTimerQueue & queue; + epicsTimer & timer; tcpiiu &iiu; bool responsePending; bool beaconAnomaly; @@ -174,8 +175,9 @@ public: void cancel (); private: const double period; - epicsTimer &timer; - tcpiiu &iiu; + epicsTimerQueue & queue; + epicsTimer & timer; + tcpiiu & iiu; expireStatus expire ( const epicsTime & currentTime ); }; @@ -231,6 +233,7 @@ public: void blockUntilSendBacklogIsReasonable ( epicsMutex & ); virtual void show ( unsigned level ) const; bool setEchoRequestPending (); + void requestRecvProcessPostponedFlush (); bool ca_v41_ok () const; bool ca_v42_ok () const; @@ -279,6 +282,7 @@ private: bool sockCloseCompleted; bool f_trueOnceOnly; bool earlyFlush; + bool recvProcessPostponedFlush; unsigned sendBytes ( const void *pBuf, unsigned nBytesInBuf ); unsigned recvBytes ( void *pBuf, unsigned nBytesInBuf ); @@ -302,7 +306,7 @@ private: void clearChannelRequest ( nciu & ); void subscriptionRequest ( nciu &, netSubscription &subscr ); void subscriptionCancelRequest ( nciu &, netSubscription &subscr ); - + void flushIfRecvProcessRequested (); bool flush (); // only to be called by the send thread }; @@ -373,20 +377,16 @@ inline comBuf * comQueSend::popNextComBufToSend () return pBuf; } +inline unsigned comQueRecv::occupiedBytes () const +{ + return this->nBytesPending; +} inline epicsInt8 comQueRecv::popInt8 () { return static_cast < epicsInt8 > ( this->popUInt8() ); } -inline epicsUInt16 comQueRecv::popUInt16 () -{ - epicsUInt16 tmp; - tmp = this->popUInt8() << 8u; - tmp |= this->popUInt8() << 0u; - return tmp; -} - inline epicsInt16 comQueRecv::popInt16 () { epicsInt16 tmp; @@ -395,16 +395,6 @@ inline epicsInt16 comQueRecv::popInt16 () return tmp; } -inline epicsUInt32 comQueRecv::popUInt32 () -{ - epicsUInt32 tmp; - tmp = this->popUInt8() << 24u; - tmp |= this->popUInt8() << 16u; - tmp |= this->popUInt8() << 8u; - tmp |= this->popUInt8() << 0u; - return tmp; -} - inline epicsInt32 comQueRecv::popInt32 () { epicsInt32 tmp ; @@ -519,5 +509,13 @@ inline SOCKET tcpiiu::getSock () const return this->sock; } +inline void tcpiiu::flushIfRecvProcessRequested () +{ + if ( this->recvProcessPostponedFlush ) { + this->flushRequest (); + this->recvProcessPostponedFlush = false; + } +} + #endif // ifdef virtualCircuith