Титульная страница   Пространства имен   Алфавитный указатель   Классы   Файлы   Члены пространства имен   Члены классов   Члены файла  

fix_alloc.hpp

См. документацию.
00001 /*
00002  * Copyright (C) Sergey P. Derevyago, 2003-2004.
00003  *
00004  * Permission to copy, use, modify, sell and distribute this software is granted
00005  * provided this copyright notice appears in all copies.
00006  * This software is provided "as is" without express or implied warranty, and
00007  * with no claim as to its suitability for any purpose.
00008  *
00009  */
00010 
00015 #ifndef __FIX_ALLOC_HPP__
00016  #define __FIX_ALLOC_HPP__
00017 
00018 #include <stddef.h>
00019 
00021 namespace fixed_alloc_private {
00022 
00030  void get_mem(void*& head, size_t type_sz);
00031 
00038  template <size_t SIZE>
00039  class void_alloc {
00041        static void* head;
00042 
00043   public:
00045        static void* alloc()
00046        {
00047         if (!head) get_mem(head, SIZE);
00048 
00049         void* ret=head;
00050         head=*(void**)head;
00051 
00052         return ret;
00053        }
00054 
00056        static void free(void* ptr)
00057        {
00058         *(void**)ptr=head;
00059         head=ptr;
00060        }
00061  };
00062 
00064  template <size_t SIZE>
00065  void* void_alloc<SIZE>::head;
00066 
00067 }
00068 
00076 template <class T>
00077 class fixed_alloc {
00078  public:
00083       enum { SIZE=(sizeof(T)+sizeof(void*)-1)/sizeof(void*)*sizeof(void*) };
00084 
00089       static T* alloc()
00090       {
00091        return (T*)fixed_alloc_private::void_alloc<SIZE>::alloc();
00092       }
00093 
00109       static void free(void* ptr)
00110       {
00111        fixed_alloc_private::void_alloc<SIZE>::free(ptr);
00112       }
00113 };
00114 
00128 class sized_alloc {
00129   public:
00137       static void* alloc(size_t size);
00138 
00146       static void free(void* ptr, size_t size);
00147 };
00148 
00149 #endif

Документация по xcppcomm. Последние изменения: Sat Mar 20 18:21:53 2004. Создано системой doxygen1.3