Warning, file /maui/brun/knumber/knumber_binary_wrapper.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 * SPDX-FileCopyrightText: 2021-2022 Rohan Asokan <rohan.asokan@students.iiit.ac.in> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 #include "knumber_binary_wrapper.h" 0007 #include "knumber.h" 0008 #include <QString> 0009 #include <QRegularExpression> 0010 #include <QLatin1String> 0011 #include <QDebug> 0012 0013 // Constructors and Destructors 0014 0015 BinaryNumber::BinaryNumber(const BinaryNumber& other) { 0016 m_number = other.toKNum(); 0017 } 0018 0019 BinaryNumber::BinaryNumber(const KNumber &num) { 0020 m_number = num; 0021 } 0022 0023 BinaryNumber::BinaryNumber(const QString &s) : m_number(KNumber("UNDEFINED_ERROR")) { 0024 const QRegularExpression binary_regex("^[01]+.[01]+|^[01]+"); 0025 0026 if (binary_regex.match(s).hasMatch()) { 0027 m_number = KNumber(0); 0028 int seperator_loc = s.indexOf('.'); 0029 if (seperator_loc == -1) seperator_loc = s.length(); 0030 0031 KNumber multiplier(1); 0032 KNumber base(2); 0033 0034 // Integer Part Calculations 0035 for (int idx = seperator_loc - 1; idx >= 0; idx--) { 0036 m_number += (KNumber(s.at(idx)) * multiplier); 0037 multiplier *= base; 0038 } 0039 0040 // multiplier = base; 0041 // // Fractional Part Calculations 0042 // for (int idx = seperator_loc + 1; idx < s.length(); idx++) { 0043 // m_number += (KNumber(s.at(idx)) / base); 0044 // multiplier *= base; 0045 // } 0046 } 0047 } 0048 0049 // Converters 0050 0051 QString BinaryNumber::toDec() const { 0052 return m_number.toQString(); 0053 } 0054 0055 KNumber BinaryNumber::toKNum() const { 0056 return m_number; 0057 } 0058 0059 // Operators 0060 0061 BinaryNumber &BinaryNumber::operator=(const BinaryNumber &rhs) { 0062 (*this).m_number = rhs.toKNum(); 0063 return *this; 0064 } 0065 0066 BinaryNumber operator+(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0067 KNumber res(lhs.toKNum()); 0068 res += rhs.toKNum(); 0069 return BinaryNumber(res); 0070 } 0071 0072 BinaryNumber operator-(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0073 KNumber res(lhs.toKNum()); 0074 res -= rhs.toKNum(); 0075 return BinaryNumber(res); 0076 } 0077 0078 BinaryNumber operator*(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0079 KNumber res(lhs.toKNum()); 0080 res *= rhs.toKNum(); 0081 return BinaryNumber(res); 0082 } 0083 0084 BinaryNumber operator/(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0085 KNumber res(lhs.toKNum()); 0086 res /= rhs.toKNum(); 0087 return BinaryNumber(res); 0088 } 0089 0090 BinaryNumber operator&(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0091 KNumber res(lhs.toKNum()); 0092 res &= rhs.toKNum(); 0093 return BinaryNumber(res); 0094 } 0095 0096 BinaryNumber operator|(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0097 KNumber res(lhs.toKNum()); 0098 res |= rhs.toKNum(); 0099 return BinaryNumber(res); 0100 } 0101 0102 BinaryNumber operator^(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0103 KNumber res(lhs.toKNum()); 0104 res ^= rhs.toKNum(); 0105 return BinaryNumber(res); 0106 } 0107 0108 BinaryNumber operator<<(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0109 KNumber res(lhs.toKNum()); 0110 res <<= rhs.toKNum(); 0111 return BinaryNumber(res); 0112 } 0113 0114 BinaryNumber operator>>(const BinaryNumber &lhs, const BinaryNumber &rhs) { 0115 KNumber res(lhs.toKNum()); 0116 res >>= rhs.toKNum(); 0117 return BinaryNumber(res); 0118 }