EEPROMextent
Arduino EEPROM library
EEPROM_ItemList.hpp
1 //-------------------------------------------------------------------
2 #ifndef __EEPROM_ItemList_H__
3 #define __EEPROM_ItemList_H__
4 //-------------------------------------------------------------------
5 
6 #define EEPROMLIST_EMPTY_OWNER 255
7 
8 #include "arduino.h"
9 #include "EEPROMextent.h"
10 
32 {
33 protected:
34  int startListPos;
35  byte itemSize;
36  int listSize;
37 
38 public:
40  EEPROM_ItemListClass() { this->itemSize = 0; this->listSize = 0; this->startListPos = 0; }
41 
47  void begin(int inStartListPos, byte inItemSize, int inListSize) { this->startListPos = inStartListPos; this->itemSize = inItemSize; this->listSize = inListSize; }
48 
52  void FreeItem(byte inSlotNumber);
56  void FreeOwnedItems(byte inOwnerSlotNumber);
57 
62  inline int GetItemPos(byte inSlotNumber)
63  {
64  return GetItemPosRaw(inSlotNumber) + 2;
65  }
66 
71  inline int GetItemPosRaw(byte inSlotNumber)
72  {
73  return (inSlotNumber * itemSize) + startListPos;
74  }
75 
80  inline byte GetSlotFromPos(int inPosition)
81  {
82  return (inPosition - startListPos) / itemSize;
83  }
84 
89  inline byte GetItemType(byte inSlotNumber)
90  {
91  return EEPROMextent.readByte(GetItemPosRaw(inSlotNumber));
92  }
93 
98  inline byte GetItemOwner(byte inSlotNumber)
99  {
100  return EEPROMextent.readByte(GetItemPosRaw(inSlotNumber) + 1);
101  }
102 
109  int SaveItemPrefix(byte inSlotNumber, byte inType, byte inOwner);
110 
114  byte GetFirstFreeSlot();
115 
122  byte FindItem(byte inType, byte inStartSlotNumber = 0, byte inOwnerId = 255);
123 
128  byte CountItems(byte inType);
129 
134  byte CountOwnedItems(byte inOwnerId);
135 
138  void clear() const;
139 };
140 
141 //-------------------------------------------------------------------
142 #endif
143 //-------------------------------------------------------------------
byte CountItems(byte inType)
byte FindItem(byte inType, byte inStartSlotNumber = 0, byte inOwnerId = 255)
int SaveItemPrefix(byte inSlotNumber, byte inType, byte inOwner)
byte GetItemOwner(byte inSlotNumber)
uint8_t readByte(int address)
Definition: EEPROMextent.h:68
byte GetItemType(byte inSlotNumber)
byte GetSlotFromPos(int inPosition)
void FreeOwnedItems(byte inOwnerSlotNumber)
byte CountOwnedItems(byte inOwnerId)
void FreeItem(byte inSlotNumber)
int GetItemPos(byte inSlotNumber)
void begin(int inStartListPos, byte inItemSize, int inListSize)
int GetItemPosRaw(byte inSlotNumber)