ObjectAllocateBuffer.h

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 #ifndef CNTM_OBJECTALLOCATEBUFFER_H
00015 #define CNTM_OBJECTALLOCATEBUFFER_H
00016 
00017 namespace Cntm
00018 {
00019         namespace SpecUtils
00020         {
00021 
00022                 /**
00023                  * Класс буфера для выделения места под объект, создаваемый оператором new(void*).
00024                  * Используется для устранения барьерного эффекта на некоторых платформах.
00025                  * 
00026                  * Шаблонный класс, параметр шаблона - класс, который будет размещен в буфере.
00027                  * 
00028                  * Класс обеспечивает многопоточность.
00029                  * @author Овсеевич Р.
00030                  * \ingroup SystemUtils
00031                  */
00032                 template <typename T>
00033                 class ObjectAllocateBuffer
00034                 {
00035                 public:
00036 
00037                         /**
00038                          * Указатель на буфер для размещения объекта указанного размера.
00039                          */
00040                         const void* Place() const { return place; }
00041                         
00042                         /**
00043                          * Указатель на буфер для размещения объекта указанного размера.
00044                          */
00045                         void* Place() { return place; }
00046                         
00047                 private:
00048                         
00049                         typedef unsigned FillType;
00050                         
00051                         FillType place[(sizeof(T) + sizeof(FillType) - 1) / sizeof(FillType)];
00052                 };
00053 
00054         }
00055 }
00056 
00057 #endif //CNTM_OBJECTALLOCATEBUFFER_H

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3