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 }