SysThreadLocalInt.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_SYSTHREADLOCALINT_H
00015 #define CNTM_SYSTHREADLOCALINT_H
00016 #include <pthread.h>
00017 #include <boost/utility.hpp>
00018 #include <Cntm/SystemUtils/SysThreadLocalPtr.h>
00019 #include <Cntm/Utils/IntTypes.h>
00020 
00021 namespace Cntm
00022 {
00023         namespace SpecUtils
00024         {
00025 
00026                 namespace IntTypeFromPointer
00027                 {
00028                 
00029                         template <int SizeOfPointer>
00030                         struct Selector
00031                         {
00032                         };
00033                         
00034                         template<>
00035                         struct Selector<4>
00036                         {
00037                                 typedef int32 Type;
00038                         };
00039         
00040                         template<>
00041                         struct Selector<8>
00042                         {
00043                                 typedef int64 Type;
00044                         };
00045         
00046                 }
00047 
00048                 
00049                 /**
00050                  * Локальная потоковая переменная. Содержит значение целого типа (размер целого равен размеру указателя). Начальное значение для каждого потока равно 0.
00051                  *
00052                  * Объекты данного класса обычно располагаются в статической памяти, чтобы локальная потокая переменная была доступна на всем протяжении выполнения программы.
00053                  * @author Овсеевич Р.
00054                  * \ingroup SystemUtils
00055                  */
00056                 class SysThreadLocalInt: boost::noncopyable
00057                 {
00058                 public:
00059 
00060                         /**
00061                          * Тип значения потковой переменной.
00062                          */
00063                         typedef IntTypeFromPointer::Selector<sizeof(void*)>::Type Type;
00064                         
00065                         /**
00066                          * Конструктор.
00067                          */
00068                         SysThreadLocalInt() {}
00069 
00070                         /**
00071                          * Деструктор.
00072                          */
00073                         ~SysThreadLocalInt() {}
00074 
00075                         /**
00076                          * Получить числовое значение для текущего потока.
00077                          */
00078                         Type Value() const { return reinterpret_cast<Type>(value.Pointer()); }
00079 
00080                         /**
00081                          * Установить числовое значение для текущего потока.
00082                          */
00083                         void SetValue(Type Val) { value.SetPointer(reinterpret_cast<void*>(Val)); }
00084                         
00085                 private:
00086                 
00087                         SysThreadLocalPtr value;
00088                 };
00089 
00090         }
00091 }
00092 
00093 #endif //CNTM_SYSTHREADLOCALINT_H

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