extensions/sqlite/sqlite-source/vdbefifo.c
branchrefac-jit
changeset 2284 026da5437111
parent 2192 7602d7fb60d9
child 2288 15c77b21589a
     1.1 --- a/extensions/sqlite/sqlite-source/vdbefifo.c	Fri Jul 11 06:51:21 2008 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,114 +0,0 @@
     1.4 -/*
     1.5 -** 2005 June 16
     1.6 -**
     1.7 -** The author disclaims copyright to this source code.  In place of
     1.8 -** a legal notice, here is a blessing:
     1.9 -**
    1.10 -**    May you do good and not evil.
    1.11 -**    May you find forgiveness for yourself and forgive others.
    1.12 -**    May you share freely, never taking more than you give.
    1.13 -**
    1.14 -*************************************************************************
    1.15 -** This file implements a FIFO queue of rowids used for processing
    1.16 -** UPDATE and DELETE statements.
    1.17 -*/
    1.18 -#include "sqliteInt.h"
    1.19 -#include "vdbeInt.h"
    1.20 -
    1.21 -/*
    1.22 -** Allocate a new FifoPage and return a pointer to it.  Return NULL if
    1.23 -** we run out of memory.  Leave space on the page for nEntry entries.
    1.24 -*/
    1.25 -static FifoPage *allocateFifoPage(int nEntry){
    1.26 -  FifoPage *pPage;
    1.27 -  if( nEntry>32767 ){
    1.28 -    nEntry = 32767;
    1.29 -  }
    1.30 -  pPage = sqlite3_malloc( sizeof(FifoPage) + sizeof(i64)*(nEntry-1) );
    1.31 -  if( pPage ){
    1.32 -    pPage->nSlot = nEntry;
    1.33 -    pPage->iWrite = 0;
    1.34 -    pPage->iRead = 0;
    1.35 -    pPage->pNext = 0;
    1.36 -  }
    1.37 -  return pPage;
    1.38 -}
    1.39 -
    1.40 -/*
    1.41 -** Initialize a Fifo structure.
    1.42 -*/
    1.43 -void sqlite3VdbeFifoInit(Fifo *pFifo){
    1.44 -  memset(pFifo, 0, sizeof(*pFifo));
    1.45 -}
    1.46 -
    1.47 -/*
    1.48 -** Push a single 64-bit integer value into the Fifo.  Return SQLITE_OK
    1.49 -** normally.   SQLITE_NOMEM is returned if we are unable to allocate
    1.50 -** memory.
    1.51 -*/
    1.52 -int sqlite3VdbeFifoPush(Fifo *pFifo, i64 val){
    1.53 -  FifoPage *pPage;
    1.54 -  pPage = pFifo->pLast;
    1.55 -  if( pPage==0 ){
    1.56 -    pPage = pFifo->pLast = pFifo->pFirst = allocateFifoPage(20);
    1.57 -    if( pPage==0 ){
    1.58 -      return SQLITE_NOMEM;
    1.59 -    }
    1.60 -  }else if( pPage->iWrite>=pPage->nSlot ){
    1.61 -    pPage->pNext = allocateFifoPage(pFifo->nEntry);
    1.62 -    if( pPage->pNext==0 ){
    1.63 -      return SQLITE_NOMEM;
    1.64 -    }
    1.65 -    pPage = pFifo->pLast = pPage->pNext;
    1.66 -  }
    1.67 -  pPage->aSlot[pPage->iWrite++] = val;
    1.68 -  pFifo->nEntry++;
    1.69 -  return SQLITE_OK;
    1.70 -}
    1.71 -
    1.72 -/*
    1.73 -** Extract a single 64-bit integer value from the Fifo.  The integer
    1.74 -** extracted is the one least recently inserted.  If the Fifo is empty
    1.75 -** return SQLITE_DONE.
    1.76 -*/
    1.77 -int sqlite3VdbeFifoPop(Fifo *pFifo, i64 *pVal){
    1.78 -  FifoPage *pPage;
    1.79 -  if( pFifo->nEntry==0 ){
    1.80 -    return SQLITE_DONE;
    1.81 -  }
    1.82 -  assert( pFifo->nEntry>0 );
    1.83 -  pPage = pFifo->pFirst;
    1.84 -  assert( pPage!=0 );
    1.85 -  assert( pPage->iWrite>pPage->iRead );
    1.86 -  assert( pPage->iWrite<=pPage->nSlot );
    1.87 -  assert( pPage->iRead<pPage->nSlot );
    1.88 -  assert( pPage->iRead>=0 );
    1.89 -  *pVal = pPage->aSlot[pPage->iRead++];
    1.90 -  pFifo->nEntry--;
    1.91 -  if( pPage->iRead>=pPage->iWrite ){
    1.92 -    pFifo->pFirst = pPage->pNext;
    1.93 -    sqlite3_free(pPage);
    1.94 -    if( pFifo->nEntry==0 ){
    1.95 -      assert( pFifo->pLast==pPage );
    1.96 -      pFifo->pLast = 0;
    1.97 -    }else{
    1.98 -      assert( pFifo->pFirst!=0 );
    1.99 -    }
   1.100 -  }else{
   1.101 -    assert( pFifo->nEntry>0 );
   1.102 -  }
   1.103 -  return SQLITE_OK;
   1.104 -}
   1.105 -
   1.106 -/*
   1.107 -** Delete all information from a Fifo object.   Free all memory held
   1.108 -** by the Fifo.
   1.109 -*/
   1.110 -void sqlite3VdbeFifoClear(Fifo *pFifo){
   1.111 -  FifoPage *pPage, *pNextPage;
   1.112 -  for(pPage=pFifo->pFirst; pPage; pPage=pNextPage){
   1.113 -    pNextPage = pPage->pNext;
   1.114 -    sqlite3_free(pPage);
   1.115 -  }
   1.116 -  sqlite3VdbeFifoInit(pFifo);
   1.117 -}