]> git.ipfire.org Git - thirdparty/squid.git/blob - src/stmem.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / stmem.h
1 /*
2 * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_STMEM_H
10 #define SQUID_STMEM_H
11
12 #include "Range.h"
13 #include "splay.h"
14
15 class mem_node;
16
17 class StoreIOBuffer;
18
19 class mem_hdr
20 {
21
22 public:
23 mem_hdr();
24 ~mem_hdr();
25 void freeContent();
26 int64_t lowestOffset () const;
27 int64_t endOffset () const;
28 int64_t freeDataUpto (int64_t);
29 ssize_t copy (StoreIOBuffer const &) const;
30 bool hasContigousContentRange(Range<int64_t> const &range) const;
31 /* success or fail */
32 bool write (StoreIOBuffer const &);
33 void dump() const;
34 size_t size() const;
35 /* Not an iterator - thus the start, not begin() */
36 mem_node const *start() const;
37 mem_node *getBlockContainingLocation (int64_t location) const;
38 /* access the contained nodes - easier than punning
39 * as a contianer ourselves
40 */
41 const Splay<mem_node *> &getNodes() const;
42 char * NodeGet(mem_node * aNode);
43
44 /* Only for use of MemObject */
45 void internalAppend(const char *data, int len);
46
47 static Splay<mem_node *>::SPLAYCMP NodeCompare;
48
49 private:
50 void debugDump() const;
51 bool unlink(mem_node *aNode);
52 void makeAppendSpace();
53 int appendToNode(mem_node *aNode, const char *data, int maxLength);
54 void appendNode (mem_node *aNode);
55 size_t copyAvailable(mem_node *aNode, int64_t location, size_t amount, char *target) const;
56 bool unionNotEmpty (StoreIOBuffer const &);
57 mem_node *nodeToRecieve(int64_t offset);
58 size_t writeAvailable(mem_node *aNode, int64_t location, size_t amount, char const *source);
59 int64_t inmem_hi;
60 Splay<mem_node *> nodes;
61 };
62
63 #endif /* SQUID_STMEM_H */
64