A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
integer.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008 INRIA
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
7 */
8#include "integer.h"
9
10#include "fatal-error.h"
11#include "log.h"
12
13#include <sstream>
14
15/**
16 * \file
17 * \ingroup attribute_Integer
18 * ns3::MakeIntegerChecker implementation.
19 */
20
21namespace ns3
22{
23
25
27
28namespace internal
29{
30
31/**
32 * \ingroup attribute_Integer
33 * Make an Integer attribute checker with embedded numeric type name.
34 *
35 * \param [in] min The minimum allowed value.
36 * \param [in] max The maximum allowed value.
37 * \param [in] name The original type name ("int8_t", "int16_t", _etc_.).
38 * \returns The AttributeChecker.
39 */
41MakeIntegerChecker(int64_t min, int64_t max, std::string name)
42{
43 NS_LOG_FUNCTION(min << max << name);
44
45 struct IntegerChecker : public AttributeChecker
46 {
47 IntegerChecker(int64_t minValue, int64_t maxValue, std::string name)
48 : m_minValue(minValue),
49 m_maxValue(maxValue),
50 m_name(name)
51 {
52 }
53
54 bool Check(const AttributeValue& value) const override
55 {
56 NS_LOG_FUNCTION(&value);
57 const auto v = dynamic_cast<const IntegerValue*>(&value);
58 if (v == nullptr)
59 {
60 return false;
61 }
62 return v->Get() >= m_minValue && v->Get() <= m_maxValue;
63 }
64
65 std::string GetValueTypeName() const override
66 {
68 return "ns3::IntegerValue";
69 }
70
71 bool HasUnderlyingTypeInformation() const override
72 {
74 return true;
75 }
76
77 std::string GetUnderlyingTypeInformation() const override
78 {
80 std::ostringstream oss;
81 oss << m_name << " " << m_minValue << ":" << m_maxValue;
82 return oss.str();
83 }
84
85 Ptr<AttributeValue> Create() const override
86 {
89 }
90
91 bool Copy(const AttributeValue& src, AttributeValue& dst) const override
92 {
93 NS_LOG_FUNCTION(&src << &dst);
94 const auto source = dynamic_cast<const IntegerValue*>(&src);
95 auto destination = dynamic_cast<IntegerValue*>(&dst);
96 if (source == nullptr || destination == nullptr)
97 {
98 return false;
99 }
100 *destination = *source;
101 return true;
102 }
103
104 int64_t m_minValue;
105 int64_t m_maxValue;
106 std::string m_name;
107 }* checker = new IntegerChecker(min, max, name);
108
109 return Ptr<AttributeChecker>(checker, false);
110}
111
112} // namespace internal
113
114} // namespace ns3
Represent the type of an attribute.
Definition attribute.h:157
Hold a value for an Attribute.
Definition attribute.h:59
Hold a signed integer type.
Definition integer.h:34
int64_t Get() const
Definition integer.cc:26
Smart pointer class similar to boost::intrusive_ptr.
NS_FATAL_x macro definitions.
#define ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME(type, name)
Define the class methods belonging to the attribute value class nameValue of the underlying class typ...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
ns3::IntegerValue attribute value declarations and template implementations.
Debug message logging.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< const AttributeChecker > MakeIntegerChecker()
Definition integer.h:99
Ptr< T > Copy(Ptr< T > object)
Return a deep copy of a Ptr.
Definition ptr.h:604