1// Aseprite
2// Copyright (C) 2001-2015 David Capello
3//
4// This program is distributed under the terms of
5// the End-User License Agreement for Aseprite.
6
7#ifndef APP_CRASH_INTERNALS_H_INCLUDED
8#define APP_CRASH_INTERNALS_H_INCLUDED
9#pragma once
10
11#include "doc/object.h"
12
13#include <algorithm>
14#include <functional>
15#include <map>
16
17namespace app {
18namespace crash {
19
20 const uint32_t MAGIC_NUMBER = 0x454E4946; // 'FINE' in ASCII
21
22 class ObjVersions {
23 public:
24 ObjVersions() {
25 m_vers[0] = 0;
26 m_vers[1] = 0;
27 m_vers[2] = 0;
28 }
29
30 size_t size() const { return 3; }
31 doc::ObjectVersion operator[](int i) const { return m_vers[i]; }
32
33 doc::ObjectVersion newer() { return m_vers[0]; }
34 doc::ObjectVersion older() { return m_vers[2]; }
35
36 // Adds a newer version
37 void rotateRevisions(doc::ObjectVersion newer) {
38 // Rotate versions
39 m_vers[2] = m_vers[1];
40 m_vers[1] = m_vers[0];
41 m_vers[0] = newer;
42 }
43
44 // Adds a version (we don't know if the version if the latest one)
45 void add(doc::ObjectVersion ver) {
46 auto minver = std::min_element(m_vers, m_vers+2);
47 if (*minver < ver) {
48 *minver = ver;
49 std::sort(m_vers, m_vers+2, std::greater<doc::ObjectVersion>());
50 }
51 }
52
53 private:
54 doc::ObjectVersion m_vers[3];
55 };
56
57 typedef std::map<doc::ObjectId, ObjVersions> ObjVersionsMap;
58
59} // namespace crash
60} // namespace app
61
62#endif
63