raze/source/core/iterators.h

85 lines
1.4 KiB
C
Raw Normal View History

2020-10-15 15:15:45 +00:00
#pragma once
class StatIterator
{
int next;
public:
StatIterator(int stat)
{
assert(stat >= 0 && stat < MAXSTATUS);
next = headspritestat[stat];
}
void Reset(int stat)
{
assert(stat >= 0 && stat < MAXSTATUS);
next = headspritestat[stat];
}
int NextIndex()
{
int n = next;
if (n >= 0) next = nextspritestat[next];
2020-10-15 15:15:45 +00:00
return n;
}
int PeekIndex()
{
return next;
}
// These are only used by one particularly screwy loop in Blood's nnexts.cpp.
static int First(int stat)
{
return headspritestat[stat];
}
static int NextFor(int spr)
{
return nextspritestat[spr];
}
};
class SectIterator
{
int next;
public:
SectIterator(int stat)
{
assert(validSectorIndex(stat));
2020-10-15 15:15:45 +00:00
next = headspritesect[stat];
}
SectIterator(sectortype* sect)
{
assert(sect);
2021-11-20 22:20:43 +00:00
next = headspritesect[sector.IndexOf(sect)];
}
2020-10-15 15:15:45 +00:00
void Reset(int stat)
{
assert(validSectorIndex(stat));
2020-10-15 15:15:45 +00:00
next = headspritesect[stat];
}
void Reset(sectortype* sect)
{
assert(sect);
2021-11-20 22:20:43 +00:00
next = headspritesect[sector.IndexOf(sect)];
}
2020-10-15 15:15:45 +00:00
int NextIndex()
{
int n = next;
if (n >= 0) next = nextspritesect[next];
2020-10-15 15:15:45 +00:00
return n;
}
int PeekIndex()
{
return next;
}
2020-10-15 15:15:45 +00:00
};