src/model.h

changeset 250
2837b549e616
parent 249
37d3c819cafa
child 251
94b0a30a1886
equal deleted inserted replaced
249:37d3c819cafa 250:2837b549e616
196 { 196 {
197 std::int32_t value; 197 std::int32_t value;
198 constexpr auto operator<=>(const ModelId& other) const = default; 198 constexpr auto operator<=>(const ModelId& other) const = default;
199 }; 199 };
200 200
201 constexpr int qHash(ModelId id) 201 constexpr unsigned int qHash(ModelId id)
202 { 202 {
203 return qHash(id.value); 203 return qHash(id.value);
204 } 204 }
205 205
206 class Model : public QAbstractListModel 206 class Model : public QAbstractListModel
209 struct Entry { 209 struct Entry {
210 ModelElement data; 210 ModelElement data;
211 ModelId id; 211 ModelId id;
212 }; 212 };
213 std::vector<Entry> body; 213 std::vector<Entry> body;
214 std::map<ModelId, int> positions; 214 std::map<ModelId, std::size_t> positions;
215 ModelId runningId = {1}; 215 ModelId runningId = {1};
216 public: 216 public:
217 Model(QObject* parent); 217 Model(QObject* parent);
218 virtual ~Model(); 218 virtual ~Model();
219 ModelId append(const ModelElement& value); 219 ModelId append(const ModelElement& value);
220 const ModelElement& at(int position) const; 220 const ModelElement& at(std::size_t position) const;
221 ModelId idAt(int position) const; 221 ModelId idAt(std::size_t position) const;
222 void assignAt(int position, const ModelElement& element); 222 void assignAt(std::size_t position, const ModelElement& element);
223 std::optional<int> find(ModelId id) const; 223 std::optional<int> find(ModelId id) const;
224 void remove(int index); 224 void remove(std::size_t index);
225 int rowCount(const QModelIndex&) const override; 225 int rowCount(const QModelIndex&) const override;
226 QVariant data(const QModelIndex& index, int role) const override; 226 QVariant data(const QModelIndex& index, int role) const override;
227 const ModelElement& operator[](int index) const; 227 const ModelElement& operator[](std::size_t index) const;
228 int size() const; 228 std::size_t size() const;
229 auto operator[](int index) { 229 auto operator[](const std::size_t index) {
230 struct { 230 struct {
231 Model& model; 231 Model& model;
232 int index; 232 const std::size_t index;
233 operator const ModelElement&() { 233 operator const ModelElement&() {
234 return model.at(index); 234 return model.at(index);
235 } 235 }
236 auto& operator=(const ModelElement& newData) { 236 auto& operator=(const ModelElement& newData) {
237 model.assignAt(index, newData); 237 model.assignAt(index, newData);
249 void updateHeaderNameField(Model& model, const QString &name); 249 void updateHeaderNameField(Model& model, const QString &name);
250 250
251 template<typename T> 251 template<typename T>
252 void iterate(const Model& model, std::function<void(const T&)> fn) 252 void iterate(const Model& model, std::function<void(const T&)> fn)
253 { 253 {
254 for (int i = 0; i < model.size(); ++i) { 254 for (std::size_t i = 0; i < model.size(); ++i) {
255 if (std::holds_alternative<T>(model[i])) { 255 if (std::holds_alternative<T>(model[i])) {
256 fn(std::get<T>(model[i])); 256 fn(std::get<T>(model[i]));
257 } 257 }
258 } 258 }
259 } 259 }

mercurial