Pokered Save Editor 2
Pokemon Red & Blue save file editor - Qt 6 C++/QML
Loading...
Searching...
No Matches
SaveFileIterator Class Reference

A moving cursor over a SaveFile, layering auto-advancing reads/writes on top of SaveFileToolset. More...

#include <savefileiterator.h>

Collaboration diagram for SaveFileIterator:

Public Member Functions

 SaveFileIterator (SaveFile *saveFile)
SaveFileIteratoroffsetTo (var16 val)
 Move the cursor to an absolute offset. Returns this for chaining.
SaveFileIteratoroffsetBy (var16 val)
 Move the cursor by a relative amount. Returns this for chaining.
SaveFileIteratorskipPadding (var16 val)
 Alias for code cleanliness (advance past padding).
SaveFileIteratorinc ()
 Increment the offset by one byte. Returns this.
SaveFileIteratordec ()
 Decrement the offset by one byte. Returns this.
SaveFilefile ()
 Get reference back to the save file.
SaveFileToolsettoolset ()
 Get the underlying address-based toolset.
SaveFileIteratorpush ()
 Bookmark the current offset (push) ...
SaveFileIteratorpop ()
 ... and return to the most recent bookmark (pop). Works like a FIFO stack.
QVector< var8getRange (var16 size, var16 padding=0, bool reverse=false)
 Copies a range of bytes to a buffer of size and returns them. Reads at the cursor, then advances by size + padding.
void copyRange (var16 size, QVector< var8 > data, var16 padding=0, bool reverse=false)
 Writes at the cursor, then advances by size + padding.
QString getStr (var16 size, var8 maxLen, var16 padding=0)
 Read a font-encoded string at the cursor; advances.
void setStr (var16 size, var8 maxLen, QString str, var16 padding=0)
 Write a font-encoded string at the cursor; advances.
QString getHex (var16 size, var16 padding=0, bool reverse=false)
 Read hex at the cursor; advances.
void setHex (var16 size, QString hex, var16 padding=0, bool reverse=false)
 Write hex at the cursor; advances.
var32 getBCD (var8 size, var16 padding=0)
 Read a BCD number at the cursor; advances.
void setBCD (var8 size, var32 val, var16 padding=0)
 Write a BCD number at the cursor; advances.
bool getBit (var8 size, var8 bit, bool reverse=false)
 Test a bit at the cursor.
void setBit (var8 size, var8 bit, bool value, bool reverse=false)
 Set a bit at the cursor.
var16 getWord (var16 padding=0, bool reverse=false)
 Read a 16-bit word at the cursor; advances.
void setWord (var16 val, var16 padding=0, bool reverse=false)
 Write a 16-bit word at the cursor; advances.
var8 getByte (var16 padding=0)
 Read a byte at the cursor; advances.
void setByte (var8 val, var16 padding=0)
 Write a byte at the cursor; advances.
QVector< bool > getBitField (var16 size, var16 padding=0)
 Read a bitfield at the cursor; advances.
void setBitField (var16 size, QVector< bool > src, var16 padding=0)
 Write a bitfield at the cursor; advances.

Public Attributes

var16 offset = 0x0000
 Current offset in the save file. Can be freely changed directly.

Protected Attributes

QVector< var16state
 Bookmark stack – saves places in the save file to go back to (push/pop).
SaveFilesaveFile = nullptr
 The save file this cursor walks.

Detailed Description

A moving cursor over a SaveFile, layering auto-advancing reads/writes on top of SaveFileToolset.

The expansion (parse) and flattening (write-back) walk the save sequentially. Doing that with raw addresses is error-prone, so the iterator keeps a current offset and offers the same primitives as SaveFileToolset but address-free: each call reads/writes at offset and advances it by the size consumed (plus optional padding). A small push()/pop() stack lets code bookmark a position, wander off to read elsewhere, then return.

Obtain one from SaveFile::iterator(). The caller owns it and must delete it (noted on SaveFile::iterator()).

See also
SaveFileToolset for the underlying address-based primitives.

Definition at line 41 of file savefileiterator.h.

Constructor & Destructor Documentation

◆ SaveFileIterator()

SaveFileIterator::SaveFileIterator ( SaveFile * saveFile)
Parameters
saveFileThe save this cursor walks.

Definition at line 26 of file savefileiterator.cpp.

References saveFile.

Referenced by dec(), inc(), offsetBy(), offsetTo(), pop(), push(), and skipPadding().

Member Function Documentation

◆ copyRange()

void SaveFileIterator::copyRange ( var16 size,
QVector< var8 > data,
var16 padding = 0,
bool reverse = false )

Writes at the cursor, then advances by size + padding.

Definition at line 96 of file savefileiterator.cpp.

References SaveFileToolset::copyRange(), offset, offsetBy(), and toolset().

◆ dec()

SaveFileIterator * SaveFileIterator::dec ( )

Decrement the offset by one byte. Returns this.

Definition at line 54 of file savefileiterator.cpp.

References offset, and SaveFileIterator().

◆ file()

SaveFile * SaveFileIterator::file ( )

Get reference back to the save file.

Definition at line 60 of file savefileiterator.cpp.

References saveFile.

◆ getBCD()

var32 SaveFileIterator::getBCD ( var8 size,
var16 padding = 0 )

Read a BCD number at the cursor; advances.

Definition at line 128 of file savefileiterator.cpp.

References SaveFileToolset::getBCD(), offset, offsetBy(), and toolset().

◆ getBit()

bool SaveFileIterator::getBit ( var8 size,
var8 bit,
bool reverse = false )

Test a bit at the cursor.

Definition at line 141 of file savefileiterator.cpp.

References getBit(), offset, and toolset().

Referenced by getBit().

◆ getBitField()

QVector< bool > SaveFileIterator::getBitField ( var16 size,
var16 padding = 0 )

Read a bitfield at the cursor; advances.

Definition at line 179 of file savefileiterator.cpp.

References SaveFileToolset::getBitField(), offset, offsetBy(), and toolset().

◆ getByte()

var8 SaveFileIterator::getByte ( var16 padding = 0)

Read a byte at the cursor; advances.

Definition at line 166 of file savefileiterator.cpp.

References SaveFileToolset::getByte(), offset, offsetBy(), and toolset().

Referenced by Item::Item(), and AreaPokemonWild::load().

◆ getHex()

QString SaveFileIterator::getHex ( var16 size,
var16 padding = 0,
bool reverse = false )

Read hex at the cursor; advances.

Definition at line 115 of file savefileiterator.cpp.

References SaveFileToolset::getHex(), offset, offsetBy(), and toolset().

◆ getRange()

QVector< var8 > SaveFileIterator::getRange ( var16 size,
var16 padding = 0,
bool reverse = false )

Copies a range of bytes to a buffer of size and returns them. Reads at the cursor, then advances by size + padding.

Parameters
fromStart offset (inclusive).
sizeByte count.
reverseRead the range in reversed byte order. Reads at the cursor, then advances by size + padding.

Definition at line 89 of file savefileiterator.cpp.

References SaveFileToolset::getRange(), offset, offsetBy(), and toolset().

◆ getStr()

QString SaveFileIterator::getStr ( var16 size,
var8 maxLen,
var16 padding = 0 )

Read a font-encoded string at the cursor; advances.

Definition at line 102 of file savefileiterator.cpp.

References SaveFileToolset::getStr(), offset, offsetBy(), and toolset().

◆ getWord()

var16 SaveFileIterator::getWord ( var16 padding = 0,
bool reverse = false )

Read a 16-bit word at the cursor; advances.

Definition at line 153 of file savefileiterator.cpp.

References SaveFileToolset::getWord(), offset, offsetBy(), and toolset().

◆ inc()

SaveFileIterator * SaveFileIterator::inc ( )

Increment the offset by one byte. Returns this.

Definition at line 48 of file savefileiterator.cpp.

References offset, and SaveFileIterator().

◆ offsetBy()

SaveFileIterator * SaveFileIterator::offsetBy ( var16 val)

Move the cursor by a relative amount. Returns this for chaining.

Definition at line 37 of file savefileiterator.cpp.

References offset, and SaveFileIterator().

Referenced by copyRange(), getBCD(), getBitField(), getByte(), getHex(), getRange(), getStr(), getWord(), setBCD(), setBitField(), setByte(), setHex(), setStr(), setWord(), and skipPadding().

◆ offsetTo()

◆ pop()

SaveFileIterator * SaveFileIterator::pop ( )

... and return to the most recent bookmark (pop). Works like a FIFO stack.

Definition at line 76 of file savefileiterator.cpp.

References offset, SaveFileIterator(), and state.

◆ push()

SaveFileIterator * SaveFileIterator::push ( )

Bookmark the current offset (push) ...

Definition at line 70 of file savefileiterator.cpp.

References offset, SaveFileIterator(), and state.

◆ setBCD()

void SaveFileIterator::setBCD ( var8 size,
var32 val,
var16 padding = 0 )

Write a BCD number at the cursor; advances.

Definition at line 135 of file savefileiterator.cpp.

References offset, offsetBy(), SaveFileToolset::setBCD(), and toolset().

◆ setBit()

void SaveFileIterator::setBit ( var8 size,
var8 bit,
bool value,
bool reverse = false )

Set a bit at the cursor.

Definition at line 147 of file savefileiterator.cpp.

References offset, setBit(), and toolset().

Referenced by AreaPokemon::save(), PlayerBasics::setBadges(), and setBit().

◆ setBitField()

void SaveFileIterator::setBitField ( var16 size,
QVector< bool > src,
var16 padding = 0 )

Write a bitfield at the cursor; advances.

Definition at line 186 of file savefileiterator.cpp.

References offset, offsetBy(), SaveFileToolset::setBitField(), and toolset().

◆ setByte()

◆ setHex()

void SaveFileIterator::setHex ( var16 size,
QString hex,
var16 padding = 0,
bool reverse = false )

Write hex at the cursor; advances.

Definition at line 122 of file savefileiterator.cpp.

References offset, offsetBy(), SaveFileToolset::setHex(), and toolset().

◆ setStr()

void SaveFileIterator::setStr ( var16 size,
var8 maxLen,
QString str,
var16 padding = 0 )

Write a font-encoded string at the cursor; advances.

Definition at line 109 of file savefileiterator.cpp.

References offset, offsetBy(), SaveFileToolset::setStr(), and toolset().

◆ setWord()

void SaveFileIterator::setWord ( var16 val,
var16 padding = 0,
bool reverse = false )

Write a 16-bit word at the cursor; advances.

Definition at line 160 of file savefileiterator.cpp.

References offset, offsetBy(), SaveFileToolset::setWord(), and toolset().

◆ skipPadding()

SaveFileIterator * SaveFileIterator::skipPadding ( var16 val)

Alias for code cleanliness (advance past padding).

Definition at line 43 of file savefileiterator.cpp.

References offsetBy(), and SaveFileIterator().

◆ toolset()

SaveFileToolset * SaveFileIterator::toolset ( )

Get the underlying address-based toolset.

Definition at line 65 of file savefileiterator.cpp.

References saveFile.

Referenced by copyRange(), getBCD(), getBit(), getBitField(), getByte(), getHex(), getRange(), getStr(), getWord(), setBCD(), setBit(), setBitField(), setByte(), setHex(), setStr(), and setWord().

Member Data Documentation

◆ offset

var16 SaveFileIterator::offset = 0x0000

Current offset in the save file. Can be freely changed directly.

Definition at line 89 of file savefileiterator.h.

Referenced by copyRange(), dec(), getBCD(), getBit(), getBitField(), getByte(), getHex(), getRange(), getStr(), getWord(), inc(), offsetBy(), offsetTo(), pop(), push(), setBCD(), setBit(), setBitField(), setByte(), setHex(), setStr(), and setWord().

◆ saveFile

SaveFile* SaveFileIterator::saveFile = nullptr
protected

The save file this cursor walks.

Definition at line 95 of file savefileiterator.h.

Referenced by file(), SaveFileIterator(), and toolset().

◆ state

QVector<var16> SaveFileIterator::state
protected

Bookmark stack – saves places in the save file to go back to (push/pop).

Definition at line 93 of file savefileiterator.h.

Referenced by pop(), and push().


The documentation for this class was generated from the following files: