⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aq.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
/*=============================================================================    Boost.Wave: A Standard compliant C++ preprocessor library    http://www.boost.org/    Copyright (c) 2001 Daniel C. Nuffer.    Copyright (c) 2001-2008 Hartmut Kaiser.     Distributed under the Boost Software License, Version 1.0. (See accompanying     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#define BOOST_WAVE_SOURCE 1#include <cstdlib>#include <cstring>#include <boost/wave/wave_config.hpp>          // configuration data#include <boost/wave/cpplexer/re2clex/aq.hpp>#include <boost/assert.hpp>// this must occur after all of the includes and before any code appears#ifdef BOOST_HAS_ABI_HEADERS#include BOOST_ABI_PREFIX#endif///////////////////////////////////////////////////////////////////////////////namespace boost {namespace wave {namespace cpplexer {namespace re2clex {int aq_grow(aq_queue q){    using namespace std;        // some systems have memcpy/realloc in std    std::size_t new_size = q->max_size << 1;    aq_stdelement* new_queue = (aq_stdelement*)realloc(q->queue,            new_size * sizeof(aq_stdelement));    BOOST_ASSERT(NULL != q);    BOOST_ASSERT(q->max_size < 100000);    BOOST_ASSERT(q->size <= q->max_size);#define ASSERT_SIZE BOOST_ASSERT( \    ((q->tail + q->max_size + 1) - q->head) % q->max_size == \    q->size % q->max_size)    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    if (!new_queue)    {        BOOST_ASSERT(0);        return 0;    }    q->queue = new_queue;    if (q->tail <= q->head) /* tail has wrapped around */    {        /* move the tail from the beginning to the end */        memcpy(q->queue + q->max_size, q->queue,                (q->tail + 1) * sizeof(aq_stdelement));        q->tail += q->max_size;    }    q->max_size = new_size;    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    return 1;}int aq_enqueue(aq_queue q, aq_stdelement e){    BOOST_ASSERT(NULL != q);    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    if (AQ_FULL(q))        if (!aq_grow(q))            return 0;    ++q->tail;    if (q->tail == q->max_size)        q->tail = 0;    q->queue[q->tail] = e;    ++q->size;    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    return 1;}int aq_enqueue_front(aq_queue q, aq_stdelement e){    BOOST_ASSERT(NULL != q);    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    if (AQ_FULL(q))        if (!aq_grow(q))            return 0;    if (q->head == 0)        q->head = q->max_size - 1;    else        --q->head;    q->queue[q->head] = e;    ++q->size;    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    return 1;}int aq_serve(aq_queue q, aq_stdelement *e){    BOOST_ASSERT(NULL != q);    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    if (AQ_EMPTY(q))        return 0;    *e = q->queue[q->head];    return aq_pop(q);}int aq_pop(aq_queue q){    BOOST_ASSERT(NULL != q);    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    if (AQ_EMPTY(q))        return 0;    ++q->head;    if (q->head == q->max_size)        q->head = 0;    --q->size;    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    return 1;}aq_queue aq_create(void){    aq_queue q;    using namespace std;        // some systems have malloc in std    q = (aq_queue)malloc(sizeof(aq_queuetype));    if (!q)    {        return 0;    }    q->max_size = 8; /* initial size */    q->queue = (aq_stdelement*)malloc(            sizeof(aq_stdelement) * q->max_size);    if (!q->queue)    {        free(q);        return 0;    }    q->head = 0;    q->tail = q->max_size - 1;    q->size = 0;    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    return q;}void aq_terminate(aq_queue q){    using namespace std;        // some systems have free in std    BOOST_ASSERT(NULL != q);    BOOST_ASSERT(q->size <= q->max_size);    ASSERT_SIZE;    BOOST_ASSERT(q->head <= q->max_size);    BOOST_ASSERT(q->tail <= q->max_size);    free(q->queue);    free(q);}///////////////////////////////////////////////////////////////////////////////}   // namespace re2clex}   // namespace cpplexer}   // namespace wave}   // namespace boost// the suffix header occurs after all of the code#ifdef BOOST_HAS_ABI_HEADERS#include BOOST_ABI_SUFFIX#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -