82 lines
2.9 KiB
C++
82 lines
2.9 KiB
C++
// Copyright (C) 2017 Jonathan Müller <jonathanmueller.dev@gmail.com>
|
|
// This file is subject to the license terms in the LICENSE file
|
|
// found in the top-level directory of this distribution.
|
|
|
|
#ifndef CPPAST_CPP_MEMBER_VARIABLE_HPP_INCLUDED
|
|
#define CPPAST_CPP_MEMBER_VARIABLE_HPP_INCLUDED
|
|
|
|
#include <cppast/cpp_entity.hpp>
|
|
#include <cppast/cpp_variable_base.hpp>
|
|
|
|
namespace cppast
|
|
{
|
|
/// Base class for all kinds of member variables.
|
|
class cpp_member_variable_base : public cpp_entity, public cpp_variable_base
|
|
{
|
|
public:
|
|
/// \returns Whether or not the member variable is declared `mutable`.
|
|
bool is_mutable() const noexcept
|
|
{
|
|
return mutable_;
|
|
}
|
|
|
|
protected:
|
|
cpp_member_variable_base(std::string name, std::unique_ptr<cpp_type> type,
|
|
std::unique_ptr<cpp_expression> def, bool is_mutable)
|
|
: cpp_entity(std::move(name)),
|
|
cpp_variable_base(std::move(type), std::move(def)),
|
|
mutable_(is_mutable)
|
|
{
|
|
}
|
|
|
|
private:
|
|
bool mutable_;
|
|
};
|
|
|
|
/// A [cppast::cpp_entity]() modelling a C++ member variable.
|
|
class cpp_member_variable final : public cpp_member_variable_base
|
|
{
|
|
public:
|
|
/// \returns A newly created and registered member variable.
|
|
/// \notes `def` may be `nullptr` in which case there is no member initializer provided.
|
|
static std::unique_ptr<cpp_member_variable> build(std::string name,
|
|
std::unique_ptr<cpp_type> type,
|
|
std::unique_ptr<cpp_expression> def,
|
|
bool is_mutable)
|
|
{
|
|
return std::unique_ptr<cpp_member_variable>(
|
|
new cpp_member_variable(std::move(name), std::move(type), std::move(def),
|
|
is_mutable));
|
|
}
|
|
|
|
private:
|
|
using cpp_member_variable_base::cpp_member_variable_base;
|
|
|
|
cpp_entity_kind do_get_entity_kind() const noexcept override;
|
|
};
|
|
|
|
/// A [cppast::cpp_entity]() modelling a C++ bitfield.
|
|
class cpp_bitfield final : public cpp_member_variable_base
|
|
{
|
|
public:
|
|
/// \returns The number of bits of the bitfield.
|
|
unsigned no_bits() const noexcept
|
|
{
|
|
return bits_;
|
|
}
|
|
|
|
private:
|
|
cpp_bitfield(std::string name, std::unique_ptr<cpp_type> type,
|
|
std::unique_ptr<cpp_expression> def, unsigned no_bits, bool is_mutable)
|
|
: cpp_member_variable_base(std::move(name), std::move(type), std::move(def), is_mutable),
|
|
bits_(no_bits)
|
|
{
|
|
}
|
|
|
|
cpp_entity_kind do_get_entity_kind() const noexcept override;
|
|
|
|
unsigned bits_;
|
|
};
|
|
} // namespace cppast
|
|
|
|
#endif // CPPAST_CPP_MEMBER_VARIABLE_HPP_INCLUDED
|