Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

boost/lockfree/detail/tagged_ptr_dcas.hpp

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

boost/lockfree/detail/tagged_ptr_dcas.hpp

//  tagged pointer, for aba prevention
//
//  Copyright (C) 2008, 2016 Tim Blechmann
//
//  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_LOCKFREE_TAGGED_PTR_DCAS_HPP_INCLUDED
#define BOOST_LOCKFREE_TAGGED_PTR_DCAS_HPP_INCLUDED
#include <cstddef>              /* for std::size_t */
#include <limits>
#include <boost/predef.h>
namespace boost    {
namespace lockfree {
namespace detail   {
template <class T>
class BOOST_ALIGNMENT(2 * sizeof(void*)) tagged_ptr
{
public:
    typedef std::size_t tag_t;
    /** uninitialized constructor */
    tagged_ptr(void) BOOST_NOEXCEPT//: ptr(0), tag(0)
    {}
#ifdef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
    tagged_ptr(tagged_ptr const & p):
        ptr(p.ptr), tag(p.tag)
    {}
#else
    tagged_ptr(tagged_ptr const & p) = default;
#endif
    explicit tagged_ptr(T * p, tag_t t = 0):
        ptr(p), tag(t)
    {}
    /** unsafe set operation */
    /* @{ */
#ifdef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
    tagged_ptr & operator= (tagged_ptr const & p)
    {
        set(p.ptr, p.tag);
        return *this;
    }
#else
    tagged_ptr & operator= (tagged_ptr const & p) = default;
#endif
    void set(T * p, tag_t t)
    {
        ptr = p;
        tag = t;
    }
    /* @} */
    /** comparing semantics */
    /* @{ */
    bool operator== (volatile tagged_ptr const & p) const
    {
        return (ptr == p.ptr) && (tag == p.tag);
    }
    bool operator!= (volatile tagged_ptr const & p) const
    {
        return !operator==(p);
    }
    /* @} */
    /** pointer access */
    /* @{ */
    T * get_ptr(void) const
    {
        return ptr;
    }
    void set_ptr(T * p)
    {
        ptr = p;
    }
    /* @} */
    /** tag access */
    /* @{ */
    tag_t get_tag() const
    {
        return tag;
    }
    tag_t get_next_tag() const
    {
        tag_t next = (get_tag() + 1) & (std::numeric_limits<tag_t>::max)();
        return next;
    }
    void set_tag(tag_t t)
    {
        tag = t;
    }
    /* @} */
    /** smart pointer support  */
    /* @{ */
    T & operator*() const
    {
        return *ptr;
    }
    T * operator->() const
    {
        return ptr;
    }
    operator bool(void) const
    {
        return ptr != 0;
    }
    /* @} */
protected:
    T * ptr;
    tag_t tag;
};
} /* namespace detail */
} /* namespace lockfree */
} /* namespace boost */
#endif /* BOOST_LOCKFREE_TAGGED_PTR_DCAS_HPP_INCLUDED */

Статья boost/lockfree/detail/tagged_ptr_dcas.hpp раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 13:43:09/0.0033280849456787/0