aboutsummaryrefslogtreecommitdiffstats
path: root/CommonLibs/LinkedLists.h
diff options
context:
space:
mode:
authordburgess <dburgess@19bc5d8c-e614-43d4-8b26-e1612bc8e597>2011-10-07 02:40:51 +0000
committerdburgess <dburgess@19bc5d8c-e614-43d4-8b26-e1612bc8e597>2011-10-07 02:40:51 +0000
commit82c46ff7aeb793d70f11fcaf22b2813b7dc0f78b (patch)
tree25cf269a01eaf3ae2ca0cece6f1a22ca61308e6d /CommonLibs/LinkedLists.h
parentcd8381743f1fe458f10e96020ad4626f4ae3d7bd (diff)
Putting the actual OpenBTS P2.8 source code into the public SVN branch.
git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2242 19bc5d8c-e614-43d4-8b26-e1612bc8e597
Diffstat (limited to 'CommonLibs/LinkedLists.h')
-rw-r--r--CommonLibs/LinkedLists.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/CommonLibs/LinkedLists.h b/CommonLibs/LinkedLists.h
new file mode 100644
index 0000000..4ca27e6
--- /dev/null
+++ b/CommonLibs/LinkedLists.h
@@ -0,0 +1,100 @@
+/*
+* Copyright 2008 Free Software Foundation, Inc.
+*
+* This software is distributed under multiple licenses; see the COPYING file in the main directory for licensing information for this specific distribuion.
+*
+* This software is distributed under the terms of the GNU Affero Public License.
+* See the COPYING file in the main directory for details.
+*
+* This use of this software may be subject to additional restrictions.
+* See the LEGAL file in the main directory for details.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+
+#ifndef LINKEDLISTS_H
+#define LINKEDLISTS_H
+
+#include <stdlib.h>
+
+
+
+/** This node class is used to build singly-linked lists. */
+class ListNode {
+
+ private:
+
+ ListNode* mNext;
+ void* mData;
+
+ public:
+
+ ListNode* next() { return mNext; }
+ void next(ListNode* wNext) { mNext=wNext; }
+
+ void* data() { return mData; }
+ void data(void* wData) { mData=wData; }
+};
+
+
+
+
+/** A fast FIFO for pointer-based storage. */
+class PointerFIFO {
+
+ private:
+
+ ListNode* mHead; ///< points to next item out
+ ListNode* mTail; ///< points to last item in
+ ListNode* mFreeList; ///< pool of previously-allocated nodes
+ unsigned mSize; ///< number of items in the FIFO
+
+ public:
+
+ PointerFIFO()
+ :mHead(NULL),mTail(NULL),mFreeList(NULL),
+ mSize(0)
+ {}
+
+ unsigned size() const { return mSize; }
+
+ /** Put an item into the FIFO. */
+ void put(void* val);
+
+ /**
+ Take an item from the FIFO.
+ Returns NULL for empty list.
+ */
+ void* get();
+
+
+ private:
+
+ /** Allocate a new node to extend the FIFO. */
+ ListNode *allocate();
+
+ /** Release a node to the free pool after removal from the FIFO. */
+ void release(ListNode* wNode);
+
+};
+
+
+
+
+
+#endif
+// vim: ts=4 sw=4