summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/stack/stack_kernel_1.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/stack/stack_kernel_1.h')
-rw-r--r--ml/dlib/dlib/stack/stack_kernel_1.h504
1 files changed, 0 insertions, 504 deletions
diff --git a/ml/dlib/dlib/stack/stack_kernel_1.h b/ml/dlib/dlib/stack/stack_kernel_1.h
deleted file mode 100644
index 427d65183..000000000
--- a/ml/dlib/dlib/stack/stack_kernel_1.h
+++ /dev/null
@@ -1,504 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_STACK_KERNEl_1_
-#define DLIB_STACK_KERNEl_1_
-
-#include "stack_kernel_abstract.h"
-#include "../algs.h"
-#include "../interfaces/enumerable.h"
-#include "../interfaces/remover.h"
-#include "../serialize.h"
-
-namespace dlib
-{
-
- template <
- typename T,
- typename mem_manager = default_memory_manager
- >
- class stack_kernel_1 : public enumerable<T>,
- public remover<T>
- {
-
- /*!
- INITIAL VALUE
- stack_size == 0
- top == 0
- current_element == 0
- _at_start == true
-
-
- CONVENTION
- at_start() == _at_start
- current_element_valid() == (current_element != 0)
- if (current_element != 0) then
- element() == current_element->item
-
- stack_size == the number of elements in the stack.
- Each node points to the next node to be poped off the stack.
- The last node in the list has its next pointer is set to 0.
-
- if (size == 0)
- {
- top == 0
- }
- else
- {
- top == pointer to the last element added to the stack
- }
- !*/
-
- struct node
- {
- node* next;
- T item;
- };
-
- public:
-
- typedef T type;
- typedef mem_manager mem_manager_type;
-
- stack_kernel_1(
- ):
- top(0),
- stack_size(0),
- current_element(0),
- _at_start(true)
- {}
-
- virtual ~stack_kernel_1(
- );
-
- inline void clear(
- );
-
- inline void push(
- T& item
- );
-
- void pop(
- T& item
- );
-
- T& current(
- );
-
- const T& current(
- ) const;
-
- inline void swap (
- stack_kernel_1& item
- );
-
- // functions from the remover interface
- inline void remove_any (
- T& item
- );
-
- // functions from the enumerable interface
- inline size_t size (
- ) const;
-
- inline bool at_start (
- ) const;
-
- inline void reset (
- ) const;
-
- bool current_element_valid (
- ) const;
-
- inline const T& element (
- ) const;
-
- inline T& element (
- );
-
- bool move_next (
- ) const;
-
- private:
-
- void delete_elements_in_stack(
- node*& top
- );
- /*!
- requires
- - top points to the top of the stack
- ensures
- - all memory has been freed
- - #top = 0
- !*/
-
-
- // data members
- typename mem_manager::template rebind<node>::other pool;
- node* top;
- unsigned long stack_size;
- mutable node* current_element;
- mutable bool _at_start;
-
-
- // restricted functions
- stack_kernel_1(stack_kernel_1&); // copy constructor
- stack_kernel_1& operator=(stack_kernel_1&); // assignment operator
-
- };
-
-
- template <
- typename T,
- typename mem_manager
- >
- inline void swap (
- stack_kernel_1<T,mem_manager>& a,
- stack_kernel_1<T,mem_manager>& b
- ) { a.swap(b); }
-
- template <
- typename T,
- typename mem_manager
- >
- void deserialize (
- stack_kernel_1<T,mem_manager>& item,
- std::istream& in
- )
- {
- try
- {
- item.clear();
- unsigned long size;
- deserialize(size,in);
- T temp = T();
- stack_kernel_1<T> temp_stack;
- for (unsigned long i = 0; i < size; ++i)
- {
- deserialize(temp,in);
- temp_stack.push(temp);
- }
- while (temp_stack.size() > 0)
- {
- temp_stack.pop(temp);
- item.push(temp);
- }
- }
- catch (serialization_error e)
- {
- item.clear();
- throw serialization_error(e.info + "\n while deserializing object of type stack_kernel_1");
- }
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- stack_kernel_1<T,mem_manager>::
- ~stack_kernel_1(
- )
- {
- delete_elements_in_stack(top);
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- clear(
- )
- {
- if (stack_size != 0)
- {
- delete_elements_in_stack(top);
- stack_size = 0;
- }
- reset();
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- T& stack_kernel_1<T,mem_manager>::
- current(
- )
- {
- return top->item;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- const T& stack_kernel_1<T,mem_manager>::
- current(
- ) const
- {
- return top->item;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- swap(
- stack_kernel_1<T,mem_manager>& item
- )
- {
- pool.swap(item.pool);
-
- // declare temp variables
- node* top_temp;
- unsigned long stack_size_temp;
-
- // swap stack_size variables
- stack_size_temp = item.stack_size;
- item.stack_size = stack_size;
- stack_size = stack_size_temp;
-
- // swap top pointers
- top_temp = item.top;
- item.top = top;
- top = top_temp;
-
- exchange(current_element,item.current_element);
- exchange(_at_start,item._at_start);
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- push(
- T& item
- )
- {
- // allocate memory for new node
- node* new_node = pool.allocate();
-
- // swap item into new_node
- exchange(new_node->item,item);
-
- // put new_node into stack
- new_node->next = top;
- top = new_node;
- ++stack_size;
-
- reset();
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- pop(
- T& item
- )
- {
- node* old_node = top;
- top = top->next;
-
- // swap the item from the stack into item
- exchange(old_node->item,item);
-
- // free the memory
- pool.deallocate(old_node);
- --stack_size;
-
- reset();
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // private member function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- delete_elements_in_stack(
- node*& top
- )
- {
- node* temp;
- while (top != 0)
- {
- temp = top->next;
- pool.deallocate(top);
- top = temp;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // enumerable function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- size_t stack_kernel_1<T,mem_manager>::
- size (
- ) const
- {
- return stack_size;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- bool stack_kernel_1<T,mem_manager>::
- at_start (
- ) const
- {
- return _at_start;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- reset (
- ) const
- {
- _at_start = true;
- current_element = 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- bool stack_kernel_1<T,mem_manager>::
- current_element_valid (
- ) const
- {
- return current_element != 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- const T& stack_kernel_1<T,mem_manager>::
- element (
- ) const
- {
- return current_element->item;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- T& stack_kernel_1<T,mem_manager>::
- element (
- )
- {
- return current_element->item;
- }
-
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- bool stack_kernel_1<T,mem_manager>::
- move_next (
- ) const
- {
- if (!_at_start)
- {
- if (current_element)
- {
- current_element = current_element->next;
- if (current_element)
- return true;
- else
- return false;
- }
- else
- {
- return false;
- }
- }
- else
- {
- _at_start = false;
- if (stack_size)
- {
- current_element = top;
- return true;
- }
- else
- {
- return false;
- }
- }
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // remover function definitions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- template <
- typename T,
- typename mem_manager
- >
- void stack_kernel_1<T,mem_manager>::
- remove_any (
- T& item
- )
- {
- pop(item);
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_STACK_KERNEl_1_
-