#ifndef LOADCOMMAND_H
#define LOADCOMMAND_H
#include "macho_global.h"

class MachOHeader;
class MachOFile;

class EXPORT LoadCommand
{
protected:
    LoadCommand(MachOHeader* header);
public:
    static LoadCommand* getLoadCommand(unsigned int cmd, MachOHeader* header);
    virtual ~LoadCommand();
    virtual unsigned int getSize() const = 0;
    // is smaller than getSize() because it only returns the size of the command structure
    // only necessary if command uses getLcData()
    virtual unsigned int getStructureSize() const { return 0; }
protected:
    MachOHeader* header;
    MachOFile& file;
    const unsigned int offset;

    const char* getLcDataString(unsigned int offset) const;
private:
    mutable char* lcData;

    void readLcData() const;
};

#endif // LOADCOMMAND_H
