/*
- * $Id: stmem.h,v 1.3 2003/06/24 12:30:59 robertc Exp $
- *
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
* ----------------------------------------------------------
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
*
+ * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
*/
#ifndef SQUID_STMEM_H
#define SQUID_STMEM_H
-#include "splay.h"
#include "Range.h"
+#include "splay.h"
class mem_node;
mem_hdr();
~mem_hdr();
void freeContent();
- int lowestOffset () const;
- off_t endOffset () const;
- int freeDataUpto (int);
- ssize_t copy (off_t, char *, size_t) const;
- bool hasContigousContentRange(Range<size_t> const &range) const;
+ int64_t lowestOffset () const;
+ int64_t endOffset () const;
+ int64_t freeDataUpto (int64_t);
+ ssize_t copy (StoreIOBuffer const &) const;
+ bool hasContigousContentRange(Range<int64_t> const &range) const;
/* success or fail */
bool write (StoreIOBuffer const &);
+ void dump() const;
+ size_t size() const;
+ /* Not an iterator - thus the start, not begin() */
+ mem_node const *start() const;
+ mem_node *getBlockContainingLocation (int64_t location) const;
+ /* access the contained nodes - easier than punning
+ * as a contianer ourselves
+ */
+ const Splay<mem_node *> &getNodes() const;
+ char * NodeGet(mem_node * aNode);
/* Only for use of MemObject */
void internalAppend(const char *data, int len);
- mem_node *head;
- mem_node *tail;
+
+ static SplayNode<mem_node *>::SPLAYCMP NodeCompare;
private:
- void unlinkHead();
+ void debugDump() const;
+ bool unlink(mem_node *aNode);
void makeAppendSpace();
int appendToNode(mem_node *aNode, const char *data, int maxLength);
void appendNode (mem_node *aNode);
- mem_node *getBlockContainingLocation (size_t location) const;
- size_t copyAvailable(mem_node *aNode, size_t location, size_t amount, char *target) const;
+ size_t copyAvailable(mem_node *aNode, int64_t location, size_t amount, char *target) const;
bool unionNotEmpty (StoreIOBuffer const &);
- mem_node *getHighestBlockBeforeLocation (size_t location) const;
- mem_node *nodeToRecieve(off_t offset);
- size_t writeAvailable(mem_node *aNode, size_t location, size_t amount, char const *source);
- off_t inmem_hi;
- Splay<mem_node> nodes;
+ mem_node *nodeToRecieve(int64_t offset);
+ size_t writeAvailable(mem_node *aNode, int64_t location, size_t amount, char const *source);
+ int64_t inmem_hi;
+ Splay<mem_node *> nodes;
};
#endif /* SQUID_STMEM_H */