Calculator  Step 6
Public Member Functions | Private Member Functions | Private Attributes | List of all members
number_long Class Reference

#include <number_impl.hpp>

Inheritance diagram for number_long:
number_impl

Public Member Functions

 number_long (long long value)
 
long long value () const
 
virtual std::shared_ptr
< number_impl
promote_to_void ()
 
virtual std::shared_ptr
< number_impl
promote_to_rational ()
 
virtual std::shared_ptr
< number_impl
promote_to_double ()
 
- Public Member Functions inherited from number_impl
virtual ~number_impl ()
 
void print (std::ostream &stream) const
 
std::string to_string () const
 
void save (std::ostream &stream) const
 
bool equals (number_impl const &rhs) const
 
bool less (number_impl const &rhs) const
 
std::shared_ptr< number_impladd (number_impl const &rhs)
 
std::shared_ptr< number_implsubtract (number_impl const &rhs)
 
std::shared_ptr< number_implmultiply (number_impl const &rhs)
 
std::shared_ptr< number_impldivide (number_impl const &rhs)
 
void add_ref ()
 
void del_ref ()
 
std::shared_ptr< number_implpromote (number_impl &rhs) const
 
virtual std::shared_ptr
< number_impl
promote_to_long ()
 

Private Member Functions

virtual std::string do_to_string () const
 
virtual void do_save (std::ostream &stream) const
 
virtual bool do_equals (number_impl const &rhs) const
 
virtual bool do_less (number_impl const &rhs) const
 
virtual std::shared_ptr
< number_impl
do_add (number_impl const &rhs)
 
virtual std::shared_ptr
< number_impl
do_subtract (number_impl const &rhs)
 
virtual std::shared_ptr
< number_impl
do_multiply (number_impl const &rhs)
 
virtual std::shared_ptr
< number_impl
do_divide (number_impl const &rhs)
 
virtual std::shared_ptr
< number_impl
do_promote (number_impl &rhs) const
 

Private Attributes

long long value_
 

Additional Inherited Members

- Static Public Member Functions inherited from number_impl
static std::shared_ptr
< number_impl
read_library (std::istream &stream)
 
- Protected Member Functions inherited from number_impl
 number_impl ()
 

Detailed Description

Represent an integer. For the greatest range, always use long to represent integers.

Definition at line 98 of file number_impl.hpp.

Constructor & Destructor Documentation

number_long::number_long ( long long  value)
inline

Definition at line 100 of file number_impl.hpp.

100 : number_impl(), value_(value) {}
long long value() const
long long value_

Member Function Documentation

std::shared_ptr< number_impl > number_long::do_add ( number_impl const &  rhs)
privatevirtual

Implements number_impl.

Definition at line 200 of file number_impl.cpp.

References value(), and value_.

201 {
202  return std::make_shared<number_long>(value_ + dynamic_cast<number_long const&>(rhs).value());
203 }
long long value() const
long long value_
std::shared_ptr< number_impl > number_long::do_divide ( number_impl const &  rhs)
privatevirtual

Implements number_impl.

Definition at line 215 of file number_impl.cpp.

References value(), and value_.

216 {
217  long long right = dynamic_cast<number_long const&>(rhs).value();
218  if (right == 0)
219  throw calc_error{"division by zero"};
220  return std::make_shared<number_rational>(value_, right);
221 }
long long value() const
long long value_
bool number_long::do_equals ( number_impl const &  rhs) const
privatevirtual

Implements number_impl.

Definition at line 188 of file number_impl.cpp.

References value().

190 {
191  return value() == dynamic_cast<number_long const&>(rhs).value();
192 }
long long value() const
bool number_long::do_less ( number_impl const &  rhs) const
privatevirtual

Implements number_impl.

Definition at line 194 of file number_impl.cpp.

References value().

196 {
197  return value() < dynamic_cast<number_long const&>(rhs).value();
198 }
long long value() const
std::shared_ptr< number_impl > number_long::do_multiply ( number_impl const &  rhs)
privatevirtual

Implements number_impl.

Definition at line 210 of file number_impl.cpp.

References value(), and value_.

211 {
212  return std::make_shared<number_long>(value_ * dynamic_cast<number_long const&>(rhs).value());
213 }
long long value() const
long long value_
std::shared_ptr< number_impl > number_long::do_promote ( number_impl rhs) const
privatevirtual

Implements number_impl.

Definition at line 223 of file number_impl.cpp.

References number_impl::promote_to_long().

225 {
226  return rhs.promote_to_long();
227 }
virtual std::shared_ptr< number_impl > promote_to_long()
void number_long::do_save ( std::ostream &  stream) const
privatevirtual

Implements number_impl.

Definition at line 182 of file number_impl.cpp.

References value().

184 {
185  stream << "long " << value() << ' ';
186 }
long long value() const
std::shared_ptr< number_impl > number_long::do_subtract ( number_impl const &  rhs)
privatevirtual

Implements number_impl.

Definition at line 205 of file number_impl.cpp.

References value(), and value_.

206 {
207  return std::make_shared<number_long>(value_ - dynamic_cast<number_long const&>(rhs).value());
208 }
long long value() const
long long value_
std::string number_long::do_to_string ( ) const
privatevirtual

Implements number_impl.

Definition at line 174 of file number_impl.cpp.

References value().

176 {
177  std::ostringstream stream{};
178  stream << value();
179  return stream.str();
180 }
long long value() const
std::shared_ptr< number_impl > number_long::promote_to_double ( )
virtual

Reimplemented from number_impl.

Definition at line 239 of file number_impl.cpp.

References value().

240 {
241  return std::make_shared<number_double>(value());
242 }
long long value() const
std::shared_ptr< number_impl > number_long::promote_to_rational ( )
virtual

Reimplemented from number_impl.

Definition at line 234 of file number_impl.cpp.

References value().

235 {
236  return std::make_shared<number_rational>(value());
237 }
long long value() const
std::shared_ptr< number_impl > number_long::promote_to_void ( )
virtual

Reimplemented from number_impl.

Definition at line 229 of file number_impl.cpp.

230 {
231  return std::make_shared<number_void>();
232 }
long long number_long::value ( ) const
inline

Member Data Documentation

long long number_long::value_
private

Definition at line 116 of file number_impl.hpp.

Referenced by do_add(), do_divide(), do_multiply(), do_subtract(), and value().


The documentation for this class was generated from the following files: