1 /* Cycript - Optimizing JavaScript Compiler/Runtime
 
   2  * Copyright (C) 2009-2014  Jay Freeman (saurik)
 
   5 /* GNU Affero General Public License, Version 3 {{{ */
 
   7  * This program is free software: you can redistribute it and/or modify
 
   8  * it under the terms of the GNU Affero General Public License as published by
 
   9  * the Free Software Foundation, either version 3 of the License, or
 
  10  * (at your option) any later version.
 
  12  * This program is distributed in the hope that it will be useful,
 
  13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  15  * GNU Affero General Public License for more details.
 
  17  * You should have received a copy of the GNU Affero General Public License
 
  18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
  22 #ifndef CYCRIPT_LOCAL_HPP
 
  23 #define CYCRIPT_LOCAL_HPP
 
  27 template <typename Type_>
 
  30     static ::pthread_key_t key_;
 
  35     static _finline void Set(Type_ *value) {
 
  36         _assert(::pthread_setspecific(key_, value) == 0);
 
  39     static ::pthread_key_t Key_() {
 
  41         ::pthread_key_create(&key, NULL);
 
  46     CYLocal(Type_ *next) {
 
  55     static _finline Type_ *Get() {
 
  56         return reinterpret_cast<Type_ *>(::pthread_getspecific(key_));
 
  60 #endif/*CYCRIPT_LOCAL_HPP*/