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

File:
1 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++
Note: See TracChangeset for help on using the changeset viewer.