File indexing completed on 2024-04-21 05:41:35

0001 /*
0002     This file is part of KCachegrind.
0003 
0004     SPDX-FileCopyrightText: 2002-2016 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
0005 
0006     SPDX-License-Identifier: GPL-2.0-only
0007 */
0008 
0009 #include "addr.h"
0010 
0011 //---------------------------------------------------
0012 // Addr
0013 
0014 bool Addr::set(FixString& s)
0015 {
0016     return s.stripUInt64(_v);
0017 }
0018 
0019 int Addr::set(const char *s)
0020 {
0021     int n = 0;
0022     _v = 0;
0023 
0024     while((n<16) && *s) {
0025         if ((*s>='0') && (*s<='9'))
0026             _v = 16*_v + (*s-'0');
0027         else if ((*s>='a') && (*s<='f'))
0028             _v = 16*_v + 10 + (*s-'a');
0029         else if ((*s>='A') && (*s<='F'))
0030             _v = 16*_v + 10 + (*s-'A');
0031         else break;
0032         s++;
0033         n++;
0034     }
0035 
0036     return n;
0037 }
0038 
0039 
0040 QString Addr::toString() const
0041 {
0042     if (_v == 0) return QStringLiteral("0");
0043 
0044     uint64 n = _v;
0045     QString hex;
0046     hex.reserve(16);
0047 
0048     while(n>0) {
0049         int d = (n & 15);
0050         hex = QChar((d<10) ? ('0'+d) : ('A'-10+d)) + hex;
0051         n /= 16;
0052     }
0053 
0054     return hex;
0055 }
0056 
0057 QString Addr::pretty() const
0058 {
0059     if (_v == 0) return QStringLiteral("0");
0060 
0061     uint64 n = _v;
0062     int p = 0;
0063     QString hex;
0064     hex.reserve(20);
0065 
0066     while(n>0) {
0067         int d = (n & 15);
0068         if ((p>0) && ((p%4)==0)) hex = ' ' + hex;
0069         hex = QChar((d<10) ? ('0'+d) : ('A'-10+d)) + hex;
0070         n /= 16;
0071         p++;
0072     }
0073 
0074     return hex;
0075 }
0076 
0077 bool Addr::isInRange(Addr a, int distance)
0078 {
0079     uint64 diff = (a._v > _v) ? (a._v - _v) : (_v - a._v);
0080     uint64 dist = (distance<0) ? distance : -distance;
0081     return (diff < dist);
0082 }