home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / h / vd2 / system / VDQueue.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  2.3 KB  |  91 lines

  1. //    VirtualDub - Video processing and capture application
  2. //    System library component
  3. //    Copyright (C) 1998-2004 Avery Lee, All Rights Reserved.
  4. //
  5. //    Beginning with 1.6.0, the VirtualDub system library is licensed
  6. //    differently than the remainder of VirtualDub.  This particular file is
  7. //    thus licensed as follows (the "zlib" license):
  8. //
  9. //    This software is provided 'as-is', without any express or implied
  10. //    warranty.  In no event will the authors be held liable for any
  11. //    damages arising from the use of this software.
  12. //
  13. //    Permission is granted to anyone to use this software for any purpose,
  14. //    including commercial applications, and to alter it and redistribute it
  15. //    freely, subject to the following restrictions:
  16. //
  17. //    1.    The origin of this software must not be misrepresented; you must
  18. //        not claim that you wrote the original software. If you use this
  19. //        software in a product, an acknowledgment in the product
  20. //        documentation would be appreciated but is not required.
  21. //    2.    Altered source versions must be plainly marked as such, and must
  22. //        not be misrepresented as being the original software.
  23. //    3.    This notice may not be removed or altered from any source
  24. //        distribution.
  25.  
  26. #ifndef f_VD2_SYSTEM_VDQUEUE_H
  27. #define f_VD2_SYSTEM_VDQUEUE_H
  28.  
  29. #include <vd2/system/List.h>
  30.  
  31. template<class T>
  32. class VDQueueNode : public ListNode2< VDQueueNode<T> > {
  33. public:
  34.     T t;
  35.     VDQueueNode(const T& t2) : t(t2) {}
  36. };
  37.  
  38. template<class T>
  39. class VDQueue {
  40. public:
  41.     ListAlloc< VDQueueNode<T> > list;
  42.  
  43.     VDQueue<T>();
  44.     ~VDQueue<T>();
  45.     T Pop();
  46.     T Peek();
  47.     void Push(const T&);
  48.     bool isEmpty() { return list.IsEmpty(); }
  49. };
  50.  
  51. template<class T>
  52. VDQueue<T>::VDQueue<T>() {
  53. }
  54.  
  55. template<class T>
  56. VDQueue<T>::~VDQueue<T>() {
  57.     while(!list.IsEmpty())
  58.         delete list.RemoveTail();
  59. }
  60.  
  61. template<class T>
  62. T VDQueue<T>::Peek() {
  63.     return list.AtHead()->t;
  64. }
  65.  
  66. template<class T>
  67. T VDQueue<T>::Pop() {
  68.     return list.RemoveHead()->t;
  69. }
  70.  
  71. template<class T>
  72. void VDQueue<T>::Push(const T& t) {
  73.     list.AddTail(new VDQueueNode<T>(t));
  74. }
  75.  
  76. /////////////
  77.  
  78. template<class T>
  79. class VDQueueAlloc : public VDQueue<T> {
  80. public:
  81.     ~VDQueueAlloc();
  82. };
  83.  
  84. template<class T>
  85. VDQueueAlloc<T>::~VDQueueAlloc() {
  86.     for(ListAlloc< VDQueueNode<T> >::fwit it = list.begin(); it; ++it)
  87.         delete &*it;
  88. }
  89.  
  90. #endif
  91.