Implemented JSON serialization
Added new iterator and const_iterator objects to UserList and also implemented the serialization function to write to a JSON file
This commit is contained in:
@ -8,6 +8,8 @@
|
||||
UserList loadUserList(const QString &file)
|
||||
{
|
||||
QFile doc{std::filesystem::path{file.toStdString()}};
|
||||
doc.open(QFile::ReadOnly);
|
||||
|
||||
QString fileContents = doc.readAll();
|
||||
|
||||
QJsonParseError errors;
|
||||
@ -24,11 +26,11 @@ UserList loadUserList(const QString &file)
|
||||
QJsonArray array = document.array();
|
||||
QVector<User> container;
|
||||
|
||||
for (auto elem: array)
|
||||
for (QJsonArray::const_iterator elem = array.constBegin(); elem != array.constEnd(); ++elem)
|
||||
{
|
||||
auto obj = elem.toObject();
|
||||
User newUser{obj["name"].toString(), QDate::fromString(obj["date_of_birth"].toString()),
|
||||
QDate::fromString(obj["date_of_death"].toString()), obj["default"].toBool()};
|
||||
auto obj = elem->toObject();
|
||||
User newUser{obj[NAME_LABEL].toString(), QDate::fromString(obj[DATE_OF_BIRTH_LABEL].toString()),
|
||||
QDate::fromString(obj[DATE_OF_DEATH_LABEL].toString()), obj[DEFAULT_LABEL].toBool()};
|
||||
|
||||
container.append(newUser);
|
||||
}
|
||||
@ -36,7 +38,24 @@ UserList loadUserList(const QString &file)
|
||||
return container;
|
||||
}
|
||||
|
||||
void saveUserList(const UserList &list)
|
||||
void saveUserList(const UserList &list, const QString &file)
|
||||
{
|
||||
QFile doc{std::filesystem::path{file.toStdString()}};
|
||||
doc.open(QFile::WriteOnly);
|
||||
|
||||
QJsonArray container;
|
||||
|
||||
for(auto &obj: list)
|
||||
{
|
||||
QJsonObject newObject;
|
||||
newObject[NAME_LABEL] = obj.getName();
|
||||
newObject[DATE_OF_BIRTH_LABEL] = obj.getDateOfBirth().toString();
|
||||
newObject[DATE_OF_DEATH_LABEL] = obj.getDateOfDeath().toString();
|
||||
newObject[DEFAULT_LABEL] = obj.getIsItDefault();
|
||||
|
||||
container.append(newObject);
|
||||
}
|
||||
|
||||
QJsonDocument document{container};
|
||||
doc.write(document.toJson());
|
||||
}
|
||||
|
@ -1,9 +1,14 @@
|
||||
#ifndef SERIALIZATION_H
|
||||
#define SERIALIZATION_H
|
||||
|
||||
#define NAME_LABEL "name"
|
||||
#define DATE_OF_BIRTH_LABEL "date_of_birth"
|
||||
#define DATE_OF_DEATH_LABEL "date_of_death"
|
||||
#define DEFAULT_LABEL "default"
|
||||
|
||||
#include "userlist.h"
|
||||
|
||||
UserList loadUserList(const QString &file);
|
||||
void saveUserList(const UserList &list);
|
||||
void saveUserList(const UserList &list, const QString &file);
|
||||
|
||||
#endif // SERIALIZATION_H
|
||||
|
@ -3,3 +3,43 @@
|
||||
User::User(QString name, QDate dateOfBirth, QDate dateOfDeath, bool isItDefault)
|
||||
: name{name}, dateOfBirth{dateOfBirth}, dateOfDeath{dateOfDeath}, isItDefault{isItDefault}
|
||||
{}
|
||||
|
||||
QString User::getName() const
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
void User::setName(const QString &newName)
|
||||
{
|
||||
name = newName;
|
||||
}
|
||||
|
||||
QDate User::getDateOfBirth() const
|
||||
{
|
||||
return dateOfBirth;
|
||||
}
|
||||
|
||||
void User::setDateOfBirth(const QDate &newDateOfBirth)
|
||||
{
|
||||
dateOfBirth = newDateOfBirth;
|
||||
}
|
||||
|
||||
QDate User::getDateOfDeath() const
|
||||
{
|
||||
return dateOfDeath;
|
||||
}
|
||||
|
||||
void User::setDateOfDeath(const QDate &newDateOfDeath)
|
||||
{
|
||||
dateOfDeath = newDateOfDeath;
|
||||
}
|
||||
|
||||
bool User::getIsItDefault() const
|
||||
{
|
||||
return isItDefault;
|
||||
}
|
||||
|
||||
void User::setIsItDefault(bool newIsItDefault)
|
||||
{
|
||||
isItDefault = newIsItDefault;
|
||||
}
|
||||
|
@ -7,6 +7,18 @@ class User
|
||||
public:
|
||||
User(QString name, QDate dateOfBirth, QDate dateOfDeath, bool isItDefault = false);
|
||||
|
||||
QString getName() const;
|
||||
void setName(const QString &newName);
|
||||
|
||||
QDate getDateOfBirth() const;
|
||||
void setDateOfBirth(const QDate &newDateOfBirth);
|
||||
|
||||
QDate getDateOfDeath() const;
|
||||
void setDateOfDeath(const QDate &newDateOfDeath);
|
||||
|
||||
bool getIsItDefault() const;
|
||||
void setIsItDefault(bool newIsItDefault);
|
||||
|
||||
private:
|
||||
QString name;
|
||||
QDate dateOfBirth;
|
||||
|
@ -14,6 +14,67 @@ public:
|
||||
QVector<User> getList() const;
|
||||
void setList(const QVector<User> &newList);
|
||||
|
||||
struct iteratable
|
||||
{
|
||||
using iterator_category = std::forward_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = User;
|
||||
using pointer = User *; // or also value_type*
|
||||
using reference = User&; // or also value_type&
|
||||
|
||||
iteratable(User *begin)
|
||||
: ptr{begin}
|
||||
{}
|
||||
|
||||
reference operator*() const { return *ptr; }
|
||||
pointer operator->() { return ptr; }
|
||||
|
||||
// Prefix increment
|
||||
iteratable& operator++() { ptr++; return *this; }
|
||||
|
||||
// Postfix increment
|
||||
iteratable operator++(int) { iteratable tmp = *this; ++(*this); return tmp; }
|
||||
|
||||
friend bool operator== (const iteratable& a, const iteratable& b) { return a.ptr == b.ptr; };
|
||||
friend bool operator!= (const iteratable& a, const iteratable& b) { return a.ptr != b.ptr; };
|
||||
|
||||
private:
|
||||
User* ptr;
|
||||
};
|
||||
struct const_interatable
|
||||
{
|
||||
using iterator_category = std::forward_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = const User;
|
||||
using pointer = const User *; // or also value_type*
|
||||
using reference = const User&; // or also value_type&
|
||||
|
||||
const_interatable(const User *begin)
|
||||
: ptr{begin}
|
||||
{}
|
||||
|
||||
reference operator*() const { return *ptr; }
|
||||
pointer operator->() { return ptr; }
|
||||
|
||||
// Prefix increment
|
||||
const_interatable& operator++() { ptr++; return *this; }
|
||||
|
||||
// Postfix increment
|
||||
const_interatable operator++(int) { const_interatable tmp = *this; ++(*this); return tmp; }
|
||||
|
||||
friend bool operator== (const const_interatable& a, const const_interatable& b) { return a.ptr == b.ptr; };
|
||||
friend bool operator!= (const const_interatable& a, const const_interatable& b) { return a.ptr != b.ptr; };
|
||||
|
||||
private:
|
||||
const User* ptr;
|
||||
};
|
||||
|
||||
iteratable begin() { return &*list.begin(); }
|
||||
iteratable end() { return &*list.end(); }
|
||||
|
||||
const_interatable begin() const { return &*list.begin(); }
|
||||
const_interatable end() const { return &*list.end(); }
|
||||
|
||||
private:
|
||||
QVector<User> list;
|
||||
};
|
||||
|
Reference in New Issue
Block a user