Program Listing for File StatusMask.hpp

Return to documentation for file (/tmp/ws/src/fastrtps/include/fastdds/dds/core/status/StatusMask.hpp)

/*
 * Copyright 2010, Object Management Group, Inc.
 * Copyright 2010, PrismTech, Corp.
 * Copyright 2010, Real-Time Innovations, Inc.
 * Copyright 2019, Proyectos y Sistemas de Mantenimiento SL (eProsima).
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _FASTDDS_STATUSMASK_HPP_
#define _FASTDDS_STATUSMASK_HPP_

#include <fastrtps/fastrtps_dll.h>

#include <bitset>
#include <sstream>

#define FASTDDS_STATUS_COUNT size_t(16)

namespace eprosima {
namespace fastdds {
namespace dds {

class RTPS_DllAPI StatusMask : public std::bitset<FASTDDS_STATUS_COUNT>
{
public:

    typedef std::bitset<FASTDDS_STATUS_COUNT> MaskType;

    StatusMask()
        : std::bitset<FASTDDS_STATUS_COUNT>()
    {
    }

    explicit StatusMask(
            uint32_t mask)
        : std::bitset<FASTDDS_STATUS_COUNT>(mask)
    {
    }

    inline StatusMask& operator <<(
            const StatusMask& mask)
    {
        *this |= mask;
        return *this;
    }

    inline StatusMask& operator >>(
            const StatusMask& mask)
    {
        *this &= ~mask;
        return *this;
    }

    inline static StatusMask all()
    {
        return StatusMask(0x80007fe7u);
    }

    inline static StatusMask none()
    {
        return StatusMask(0u);
    }

public:

    inline static StatusMask inconsistent_topic()
    {
        return StatusMask(0x00000001 << 0u);
    }

    inline static StatusMask offered_deadline_missed()
    {
        return StatusMask(0x00000001 << 1u);
    }

    inline static StatusMask requested_deadline_missed()
    {
        return StatusMask(0x00000001 << 2u);
    }

    inline static StatusMask offered_incompatible_qos()
    {
        return StatusMask(0x00000001 << 5u);
    }

    inline static StatusMask requested_incompatible_qos()
    {
        return StatusMask(0x00000001 << 6u);
    }

    inline static StatusMask sample_lost()
    {
        return StatusMask(0x00000001 << 7u);
    }

    inline static StatusMask sample_rejected()
    {
        return StatusMask(0x00000001 << 8u);
    }

    inline static StatusMask data_on_readers()
    {
        return StatusMask(0x00000001 << 9u);
    }

    inline static StatusMask data_available()
    {
        return StatusMask(0x00000001 << 10u);
    }

    inline static StatusMask liveliness_lost()
    {
        return StatusMask(0x00000001 << 11u);
    }

    inline static StatusMask liveliness_changed()
    {
        return StatusMask(0x00000001 << 12u);
    }

    inline static StatusMask publication_matched()
    {
        return StatusMask(0x00000001 << 13u);
    }

    inline static StatusMask subscription_matched()
    {
        return StatusMask(0x00000001 << 14u);
    }

    bool is_active(
            StatusMask status) const
    {
        MaskType r = *this & status;
        return r == status;
    }

};

} //namespace dds
} //namespace fastdds
} //namespace eprosima


#endif //_FASTDDS_STATUSMASK_HPP_