Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarNetElementBasicFields.cpp
blob: 618c4a635905b5f382e3147859b2ec700c34daf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "StarNetElementBasicFields.hpp"

namespace Star {

void NetElementSize::readData(DataStream& ds, size_t& v) const {
  uint64_t s = ds.readVlqU();
  if (s == 0)
    v = NPos;
  else
    v = s - 1;
}

void NetElementSize::writeData(DataStream& ds, size_t const& v) const {
  if (v == NPos)
    ds.writeVlqU(0);
  else
    ds.writeVlqU(v + 1);
}

void NetElementBool::readData(DataStream& ds, bool& v) const {
  ds.read(v);
}

void NetElementBool::writeData(DataStream& ds, bool const& v) const {
  ds.write(v);
}

void NetElementEvent::trigger() {
  set(get() + 1);
}

uint64_t NetElementEvent::pullOccurrences() {
  uint64_t occurrences = get();
  starAssert(occurrences >= m_pulledOccurrences);
  uint64_t unchecked = occurrences - m_pulledOccurrences;
  m_pulledOccurrences = occurrences;
  return unchecked;
}

bool NetElementEvent::pullOccurred() {
  return pullOccurrences() != 0;
}

void NetElementEvent::ignoreOccurrences() {
  m_pulledOccurrences = get();
}

void NetElementEvent::setIgnoreOccurrencesOnNetLoad(bool ignoreOccurrencesOnNetLoad) {
  m_ignoreOccurrencesOnNetLoad = ignoreOccurrencesOnNetLoad;
}

void NetElementEvent::netLoad(DataStream& ds, NetCompatibilityRules rules) {
  NetElementUInt::netLoad(ds, rules);
  if (m_ignoreOccurrencesOnNetLoad)
    ignoreOccurrences();
}

void NetElementEvent::updated() {
  NetElementBasicField::updated();
  if (m_pulledOccurrences > get())
    m_pulledOccurrences = get();
}

}