From 72a71a2003028fc97d74cebecebb1541d66ded86 Mon Sep 17 00:00:00 2001 From: Javier Date: Sat, 13 Jun 2015 17:35:15 +0200 Subject: split afdpageaddress into new class --- afdpageaddress.cc | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 afdpageaddress.cc (limited to 'afdpageaddress.cc') diff --git a/afdpageaddress.cc b/afdpageaddress.cc new file mode 100644 index 0000000..708dcef --- /dev/null +++ b/afdpageaddress.cc @@ -0,0 +1,61 @@ +#include +#include +#include "afdpageaddress.h" + +namespace { +quint64 addressToUint64(uint section, uint segment, uint shelf, uint book, uint page) +{ + return quint64(section & 0xFFFU) << 52 | + quint64(segment & 0xFFFU) << 40 | quint64(shelf & 0xFFFFU) << 24 | + quint64(book & 0xFFFU) << 12 | quint64(page & 0xFFFU); +} +} + +AfdPageAddress::AfdPageAddress(uint section, uint segment, uint shelf, uint book, uint page) + : v(addressToUint64(section, segment, shelf, book, page)) +{ +} + +AfdPageAddress::AfdPageAddress(uint segment, uint shelf, uint book, uint page) + : v(addressToUint64(0, segment, shelf, book, page)) +{ +} + +AfdPageAddress::AfdPageAddress(const QString &addr) +{ + uint section, segment, shelf, book, page; + QStringList parts = addr.split('.'); + if (parts.count() == 5) { + section = parts[0].toUInt(); + segment = parts[1].toUInt(); + shelf = parts[2].toUInt(); + book = parts[3].toUInt(); + page = parts[4].toUInt(); + } else if (parts.count() == 4) { + section = 0; + segment = parts[0].toUInt(); + shelf = parts[1].toUInt(); + book = parts[2].toUInt(); + page = parts[3].toUInt(); + } else { + qWarning() << "Unknown page address syntax:" << addr; + } + v = addressToUint64(section, segment, shelf, book, page); +} + +QString AfdPageAddress::toString() const +{ + QStringList l; + l.reserve(5); + + if (section()) { + l.append(QString::number(section())); + } + + l.append(QString::number(segment())); + l.append(QString::number(shelf())); + l.append(QString::number(book())); + l.append(QString::number(page())); + + return l.join("."); +} -- cgit v1.2.3