Linux Face / QPFramework
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers qs_blk.cpp Source File

qs_blk.cpp

Go to the documentation of this file.
00001 //////////////////////////////////////////////////////////////////////////////
00002 // Product: QS/C++
00003 // Last Updated for Version: 4.0.00
00004 // Date of the Last Update:  Apr 07, 2008
00005 //
00006 //                    Q u a n t u m     L e a P s
00007 //                    ---------------------------
00008 //                    innovating embedded systems
00009 //
00010 // Copyright (C) 2002-2008 Quantum Leaps, LLC. All rights reserved.
00011 //
00012 // This software may be distributed and modified under the terms of the GNU
00013 // General Public License version 2 (GPL) as published by the Free Software
00014 // Foundation and appearing in the file GPL.TXT included in the packaging of
00015 // this file. Please note that GPL Section 2[b] requires that all works based
00016 // on this software must also be made publicly available under the terms of
00017 // the GPL ("Copyleft").
00018 //
00019 // Alternatively, this software may be distributed and modified under the
00020 // terms of Quantum Leaps commercial licenses, which expressly supersede
00021 // the GPL and are specifically designed for licensees interested in
00022 // retaining the proprietary status of their code.
00023 //
00024 // Contact information:
00025 // Quantum Leaps Web site:  http://www.quantum-leaps.com
00026 // e-mail:                  info@quantum-leaps.com
00027 //////////////////////////////////////////////////////////////////////////////
00028 #include "qs_pkg.h"
00029 
00030 /// \file
00031 /// \ingroup qs
00032 /// \brief QS::getBlock() implementation
00033 
00034 //............................................................................
00035 // get up to *pn bytes of contiguous memory
00036 uint8_t const *QS::getBlock(uint16_t *pNbytes) {
00037     if (QS_used_ == (QSCtr)0) {
00038         *pNbytes = (uint16_t)0;
00039         return (uint8_t *)0;                   // no bytes to return right now
00040     }
00041     QSCtr n = (QSCtr)(QS_end_ - QS_tail_);
00042     if (n > QS_used_) {
00043         n = QS_used_;
00044     }
00045     if (n > (QSCtr)(*pNbytes)) {
00046         n = (QSCtr)(*pNbytes);
00047     }
00048     *pNbytes = (uint16_t)n;
00049     QS_used_ = (QSCtr)(QS_used_ - n);
00050     QSCtr t = QS_tail_;
00051     QS_tail_ = (QSCtr)(QS_tail_ + n);
00052     if (QS_tail_ == QS_end_) {
00053         QS_tail_ = (QSCtr)0;
00054     }
00055     return &QS_ring_[t];
00056 }