diff options
| author | Remko Tronçon <git@el-tramo.be> | 2009-06-01 08:48:42 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2009-06-01 09:24:28 (GMT) | 
| commit | 2812bddd81f8a1b804c7460f4e14cd0aa393d129 (patch) | |
| tree | d46294f35150c4f0f43deaf2d31fceaf945ae715 /3rdParty/Boost/boost/asio/detail/call_stack.hpp | |
| download | swift-2812bddd81f8a1b804c7460f4e14cd0aa393d129.zip swift-2812bddd81f8a1b804c7460f4e14cd0aa393d129.tar.bz2 | |
Import.
Diffstat (limited to '3rdParty/Boost/boost/asio/detail/call_stack.hpp')
| -rw-r--r-- | 3rdParty/Boost/boost/asio/detail/call_stack.hpp | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/3rdParty/Boost/boost/asio/detail/call_stack.hpp b/3rdParty/Boost/boost/asio/detail/call_stack.hpp new file mode 100644 index 0000000..0096741 --- /dev/null +++ b/3rdParty/Boost/boost/asio/detail/call_stack.hpp @@ -0,0 +1,92 @@ +// +// call_stack.hpp +// ~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_DETAIL_CALL_STACK_HPP +#define BOOST_ASIO_DETAIL_CALL_STACK_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include <boost/asio/detail/push_options.hpp> + +#include <boost/asio/detail/noncopyable.hpp> +#include <boost/asio/detail/tss_ptr.hpp> + +namespace boost { +namespace asio { +namespace detail { + +// Helper class to determine whether or not the current thread is inside an +// invocation of io_service::run() for a specified io_service object. +template <typename Owner> +class call_stack +{ +public: +  // Context class automatically pushes an owner on to the stack. +  class context +    : private noncopyable +  { +  public: +    // Push the owner on to the stack. +    explicit context(Owner* d) +      : owner_(d), +        next_(call_stack<Owner>::top_) +    { +      call_stack<Owner>::top_ = this; +    } + +    // Pop the owner from the stack. +    ~context() +    { +      call_stack<Owner>::top_ = next_; +    } + +  private: +    friend class call_stack<Owner>; + +    // The owner associated with the context. +    Owner* owner_; + +    // The next element in the stack. +    context* next_; +  }; + +  friend class context; + +  // Determine whether the specified owner is on the stack. +  static bool contains(Owner* d) +  { +    context* elem = top_; +    while (elem) +    { +      if (elem->owner_ == d) +        return true; +      elem = elem->next_; +    } +    return false; +  } + +private: +  // The top of the stack of calls for the current thread. +  static tss_ptr<context> top_; +}; + +template <typename Owner> +tss_ptr<typename call_stack<Owner>::context> +call_stack<Owner>::top_; + +} // namespace detail +} // namespace asio +} // namespace boost + +#include <boost/asio/detail/pop_options.hpp> + +#endif // BOOST_ASIO_DETAIL_CALL_STACK_HPP | 
 Swift
 Swift