1//============================================================================
2//
3// SSSS tt lll lll
4// SS SS tt ll ll
5// SS tttttt eeee ll ll aaaa
6// SSSS tt ee ee ll ll aa
7// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8// SS SS tt ee ll ll aa aa
9// SSSS ttt eeeee llll llll aaaaa
10//
11// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
12// and the Stella Team
13//
14// See the file "License.txt" for information on usage and redistribution of
15// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16//============================================================================
17
18#ifndef TRAP_ARRAY_HXX
19#define TRAP_ARRAY_HXX
20
21#include "bspf.hxx"
22
23class TrapArray
24{
25 public:
26 TrapArray() : myInitialized(false) {}
27
28 bool isSet(const uInt16 address) const { return myCount[address]; }
29 bool isClear(const uInt16 address) const { return myCount[address] == 0; }
30
31 void add(const uInt16 address) { myCount[address]++; }
32 void remove(const uInt16 address) { myCount[address]--; }
33 // void toggle(uInt16 address) { myCount[address] ? remove(address) : add(address); } // TODO condition
34
35 void initialize() {
36 if(!myInitialized)
37 myCount.fill(0);
38 myInitialized = true;
39 }
40 void clearAll() { myInitialized = false; myCount.fill(0); }
41
42 bool isInitialized() const { return myInitialized; }
43
44 private:
45 // The actual counts
46 std::array<uInt8, 0x10000> myCount;
47
48 // Indicates whether we should treat this array as initialized
49 bool myInitialized;
50
51 private:
52 // Following constructors and assignment operators not supported
53 TrapArray(const TrapArray&) = delete;
54 TrapArray(TrapArray&&) = delete;
55 TrapArray& operator=(const TrapArray&) = delete;
56 TrapArray& operator=(TrapArray&&) = delete;
57};
58
59#endif
60