mirror of
https://github.com/hasherezade/bearparser
synced 2026-06-08 14:32:38 +00:00
59 lines
2.0 KiB
C++
59 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "ExeElementWrapper.h"
|
|
#include <vector>
|
|
|
|
const size_t INVALID_ENTRYNUM = (-1);
|
|
|
|
class ExeNodeWrapper : public ExeElementWrapper
|
|
{
|
|
public:
|
|
ExeNodeWrapper(Executable *pe, ExeNodeWrapper* parent = NULL);
|
|
ExeNodeWrapper(Executable *pe, ExeNodeWrapper* parent, size_t entryNumber);
|
|
|
|
virtual ~ExeNodeWrapper() { clear(); }
|
|
|
|
virtual bool wrap() { return true; }
|
|
virtual void reloadMapping() {}
|
|
|
|
virtual ExeNodeWrapper* getEntryAt(size_t fieldId);
|
|
virtual size_t getEntriesCount() { return getEntriesCount(this->entries); }
|
|
virtual size_t getEntriesNum() { return getEntriesCount(this->entries); }
|
|
virtual size_t getSubFieldsCount() { return (this->entries.size() == 0) ? 0 : this->entries[0]->getFieldsCount(); }
|
|
|
|
virtual ExeNodeWrapper* getParentNode() { return parentNode; }
|
|
size_t getEntryId() { return entryNum; }
|
|
|
|
virtual void* getSubfieldPtr(size_t fieldId, size_t subField);
|
|
virtual bufsize_t getSubfieldSize(size_t fieldId, size_t subField);
|
|
virtual QString getSubfieldName(size_t fieldId, size_t subField);
|
|
|
|
virtual QString getFieldName(size_t fieldId) = 0;
|
|
//---
|
|
virtual bool canAddEntry();
|
|
|
|
virtual ExeNodeWrapper* addEntry(ExeNodeWrapper *entry);
|
|
ExeNodeWrapper* getLastEntry();
|
|
virtual offset_t getNextEntryOffset();
|
|
virtual bufsize_t geEntrySize();
|
|
|
|
virtual bool isValid() { return true; }
|
|
|
|
protected:
|
|
size_t getEntriesCount(std::vector<ExeNodeWrapper*> &_entries);
|
|
ExeNodeWrapper* getEntryAt(std::vector<ExeNodeWrapper*> &_entries, size_t fieldId);
|
|
|
|
virtual void clear();
|
|
virtual void addMapping(ExeNodeWrapper *entry) {}
|
|
virtual bool loadNextEntry(size_t entryNum) { return false; } //TODO!
|
|
virtual ExeNodeWrapper* addEntryAt(ExeNodeWrapper *entry, offset_t nextOffset);
|
|
|
|
virtual bool isMyEntryType(ExeNodeWrapper *entry); // is it an entry of appropriate type
|
|
|
|
ExeNodeWrapper* parentNode;
|
|
size_t entryNum;
|
|
|
|
std::vector<ExeNodeWrapper*> entries; // children
|
|
};
|
|
|