Numworks Epsilon  1.4.1
Graphing Calculator Operating System
sequence_store.cpp
Go to the documentation of this file.
1 #include "sequence_store.h"
2 extern "C" {
3 #include <assert.h>
4 #include <stddef.h>
5 }
6 #include <ion.h>
7 
8 namespace Sequence {
9 
10 constexpr KDColor SequenceStore::k_defaultColors[MaxNumberOfSequences];
11 constexpr const char * SequenceStore::k_sequenceNames[MaxNumberOfSequences];
12 
14  size_t dataLengthInBytes = MaxNumberOfSequences*sizeof(uint32_t);
15  assert((dataLengthInBytes & 0x3) == 0); // Assert that dataLengthInBytes is a multiple of 4
16  uint32_t checksums[MaxNumberOfSequences];
17  for (int i = 0; i < MaxNumberOfSequences; i++) {
18  checksums[i] = m_sequences[i].checksum();
19  }
20  return Ion::crc32((uint32_t *)checksums, dataLengthInBytes/sizeof(uint32_t));
21 }
22 
24  assert(i>=0 && i<m_numberOfFunctions);
25  return &m_sequences[i];
26 }
27 
30 }
31 
34 }
35 
37  assert(m_numberOfFunctions < MaxNumberOfSequences);
38  const char * name = firstAvailableName();
39  KDColor color = firstAvailableColor();
40  Sequence addedSequence(name, color);
41  m_sequences[m_numberOfFunctions] = addedSequence;
42  Sequence * result = &m_sequences[m_numberOfFunctions];
44  return result;
45 }
46 
48  int i = 0;
49  while (&m_sequences[i] != f && i < m_numberOfFunctions) {
50  i++;
51  }
52  assert(i>=0 && i<m_numberOfFunctions);
54  for (int j = i; j<m_numberOfFunctions; j++) {
55  m_sequences[j] = m_sequences[j+1];
56  }
57  Sequence emptySequence("", KDColorBlack);
58  m_sequences[m_numberOfFunctions] = emptySequence;
59 }
60 
62  return MaxNumberOfSequences;
63 }
64 
65 char SequenceStore::symbol() const {
66  return 'n';
67 }
68 
70  for (int k = 0; k < MaxNumberOfSequences; k++) {
71  int j = 0;
72  while (j < m_numberOfFunctions) {
73  if (m_sequences[j].name() == k_sequenceNames[k]) {
74  break;
75  }
76  j++;
77  }
78  if (j == m_numberOfFunctions) {
79  return k_sequenceNames[k];
80  }
81  }
82  return k_sequenceNames[0];
83 }
84 
85 const KDColor SequenceStore::firstAvailableColor() {
86  for (int k = 0; k < MaxNumberOfSequences; k++) {
87  int j = 0;
88  while (j < m_numberOfFunctions) {
89  if (m_sequences[j].color() == k_defaultColors[k]) {
90  break;
91  }
92  j++;
93  }
94  if (j == m_numberOfFunctions) {
95  return k_defaultColors[k];
96  }
97  }
98  return k_defaultColors[0];
99 }
100 
102  for (int i = 0; i < m_numberOfFunctions; i++) {
103  Sequence emptySequence("", KDColorBlack);
104  m_sequences[i] = emptySequence;
105  }
107 }
108 
109 }
#define assert(e)
Definition: assert.h:9
Sequence * functionAtIndex(int i) override
int maxNumberOfFunctions() override
Sequence * activeFunctionAtIndex(int i) override
virtual Function * definedFunctionAtIndex(int i)
unsigned int uint32_t
Definition: stdint.h:6
char symbol() const override
uint32_t checksum() override
Definition: sequence.cpp:82
constexpr KDColor KDColorBlack
Definition: color.h:41
Sequence * addEmptyFunction() override
uint32_t storeChecksum() override
Definition: color.h:6
virtual Function * activeFunctionAtIndex(int i)
Definition: app.cpp:7
uint32_t crc32(const uint32_t *data, size_t length)
Definition: device.cpp:37
static constexpr const char * k_sequenceNames[MaxNumberOfSequences]
Sequence * definedFunctionAtIndex(int i) override
void removeFunction(Shared::Function *f) override
const char * firstAvailableName() override