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
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |