Changeset 30:1dde7e03353f in xplcommon


Ignore:
Timestamp:
01/02/13 11:54:56 (11 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
Phase:
public
Message:

A little cleanup

Files:
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • src/xplcommon/BlockingStream.cc

    r29 r30  
    6868    ReadingBuffer& readingBuffer = stream.getReadingBuffer();
    6969    while (length>0) {
    70         size_t toCopy = min(readingBuffer.getLength() - readingOffset, length);
    71         if (toCopy>0) {
    72             memcpy(d, readingBuffer.getData() + readingOffset, toCopy);
    73             readingOffset += toCopy;
    74             length -= toCopy;
    75             d += toCopy;
     70        size_t copied = readingBuffer.extract(d, length, readingOffset);
     71        readingOffset += copied;
     72        length -= copied;
     73        d += copied;
     74
     75        if (length!=0) {
     76            if (!fill()) return false;
    7677        }
    77 
    78         if (length==0) break;
    79 
    80         readingBuffer.reset();
    81         readingOffset = 0;
    82         while (!failed()) {
    83             if (isInterrupted()) return false;
    84 
    85             if (readingBuffer.read()) {
    86                 if (readingBuffer.isEmpty()) return false;
    87                 break;
    88             } else if (readingBuffer.failed()) {
    89                 setErrorCode(readingBuffer.getErrorCode());
    90             } else {
    91                 Waiter* waiter = stream.getWaiter();
    92                 waiter->wait();
    93                 if (waiter->failed()) {
    94                     setErrorCode(waiter->getErrorCode());
    95                 }
    96             }
    97         }
    98         if (failed()) return false;
    9978    }
    10079
     
    11089    WritingBuffer& writingBuffer = stream.getWritingBuffer();
    11190    while(length>0) {
    112         size_t toCopy = min(length, writingBuffer.getAvailable());
    113         if (toCopy>0) {
    114             memcpy(writingBuffer.getData() + writingBuffer.getLength(),
    115                    s, toCopy);
    116             writingBuffer.addLength(toCopy);
    117             length -= toCopy;
    118             s += toCopy;
    119         }
     91        size_t copied = writingBuffer.append(s, length);
     92        length -= copied;
     93        s += copied;
    12094
    12195        if (length==0) break;
     
    152126//------------------------------------------------------------------------------
    153127
     128bool BlockingStream::fill()
     129{
     130    ReadingBuffer& readingBuffer = stream.getReadingBuffer();
     131
     132    readingBuffer.reset();
     133    readingOffset = 0;
     134    while (true) {
     135        if (isInterrupted()) return false;
     136
     137        if (readingBuffer.read()) {
     138            return !readingBuffer.isEmpty();
     139        } else if (readingBuffer.failed()) {
     140            setErrorCode(readingBuffer.getErrorCode());
     141            return false;
     142        } else {
     143            Waiter* waiter = stream.getWaiter();
     144            waiter->wait();
     145            if (waiter->failed()) {
     146                setErrorCode(waiter->getErrorCode());
     147                return false;
     148            }
     149        }
     150    }
     151}
     152
     153//------------------------------------------------------------------------------
     154
    154155// Local Variables:
    155156// mode: C++
  • src/xplcommon/BlockingStream.h

    r29 r30  
    119119     */
    120120    bool flush();
     121
     122private:
     123    /**
     124     * Fill the buffer with data from the stream.
     125     */
     126    bool fill();
    121127};
    122128
  • src/xplcommon/Buffer.h

    r29 r30  
    3535
    3636#include <cstdlib>
     37#include <cstring>
    3738
    3839//------------------------------------------------------------------------------
     
    130131     * @return the number of bytes actually extracted.
    131132     */
    132     size_t extract(void* dest, size_t size, size_t offset = 0);
     133    size_t extract(void* dest, size_t size, size_t offset = 0) const;
    133134};
    134135
     
    207208    length += toAdd;
    208209    return toAdd;
     210}
     211
     212//------------------------------------------------------------------------------
     213
     214inline size_t Buffer::append(const void* src, size_t size)
     215{
     216    size_t toCopy = std::min(size, getAvailable());
     217    memcpy(data + length, src, toCopy);
     218    length += toCopy;
     219    return toCopy;
     220}
     221
     222//------------------------------------------------------------------------------
     223
     224inline size_t Buffer::extract(void* dest, size_t size, size_t offset) const
     225{
     226    size_t toCopy = (offset>=length) ? 0 : std::min(size, length - offset);
     227    memcpy(dest, data + offset, toCopy);
     228    return toCopy;
    209229}
    210230
  • src/xplcommon/Makefile.am

    r29 r30  
    1111libxplcommon_la_SOURCES= \
    1212        PseudoRandom.cc         \
    13         Buffer.cc               \
    1413        BlockingStream.cc
    1514
  • test/testblkstream.cc

    r29 r30  
    274274    clientThread.start();
    275275
    276     //Thread::sleep(60000);
    277     Thread::sleep(5000);
     276    Thread::sleep(60000);
     277    //Thread::sleep(5000);
    278278    printf("Signalling the server thread\n");
    279279    serverThread.interrupt();
Note: See TracChangeset for help on using the changeset viewer.