#include "SkEndian.h"
#include "SkSfntUtils.h"

static uint16_t parse_be16(const uint8_t*& p) {
    uint16_t value = (p[0] << 8) | p[1];
    p += 2;
    return value;
}

static uint32_t parse_be32(const uint8_t*& p) {
    uint32_t value = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
    p += 4;
    return value;
}

static Sk64 parse_be64(const uint8_t*& p) {
    Sk64 value;
    value.fHi = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
    value.fLo = (p[4] << 24) | (p[5] << 16) | (p[6] << 8) | p[7];
    p += 8;
    return value;
}

///////////////////////////////////////////////////////////////////////////////

bool SkSfntUtils::ReadTable_head(SkFontID fontID, SkSfntTable_head* head) {
    static const uint32_t gTag = SkSetFourByteTag('h', 'e', 'a', 'd');
    static const size_t gSize = 54;
    
    uint8_t storage[gSize];
    size_t size = SkFontHost::GetTableData(fontID, gTag, 0, gSize, storage);
    if (size != gSize) {
        return false;
    }
    
    const uint8_t* p = storage;
    head->fVersion = parse_be32(p);
    head->fRevision = parse_be32(p);
    head->fCheckSumAdjustment = parse_be32(p);
    head->fMagicNumber = parse_be32(p);
    head->fFlags = parse_be16(p);
    head->fUnitsPerEm = parse_be16(p);
    head->fDateCreated = parse_be64(p);
    head->fDateModified = parse_be64(p);
    head->fXMin = parse_be16(p);
    head->fXMin = parse_be16(p);
    head->fXMin = parse_be16(p);
    head->fXMin = parse_be16(p);
    head->fMacStyle = parse_be16(p);
    head->fLowestPPEM = parse_be16(p);
    head->fFontDirectionHint = parse_be16(p);
    head->fIndexToLocFormat = parse_be16(p);
    head->fGlyphDataFormat = parse_be16(p);
    SkASSERT(p - storage == (long)size);
    return true;
}

bool SkSfntUtils::ReadTable_maxp(SkFontID fontID, SkSfntTable_maxp* maxp) {
    static const uint32_t gTag = SkSetFourByteTag('m', 'a', 'x', 'p');
    static const size_t gSize = 32;
    
    uint8_t storage[gSize];
    size_t size = SkFontHost::GetTableData(fontID, gTag, 0, gSize, storage);
    if (size != gSize) {
        return false;
    }
    
    const uint8_t* p = storage;
    maxp->fVersion = parse_be32(p);
    maxp->fNumGlyphs = parse_be16(p);
    maxp->fMaxPoints = parse_be16(p);
    maxp->fMaxContours = parse_be16(p);
    maxp->fMaxComponentPoints = parse_be16(p);
    maxp->fMaxComponentContours = parse_be16(p);
    maxp->fMaxZones = parse_be16(p);
    maxp->fMaxTwilightPoints = parse_be16(p);
    maxp->fMaxStorage = parse_be16(p);
    maxp->fMaxFunctionDefs = parse_be16(p);
    maxp->fMaxInstructionDefs = parse_be16(p);
    maxp->fMaxStackElements = parse_be16(p);
    maxp->fMaxSizeOfInstructions = parse_be16(p);
    maxp->fMaxComponentElements = parse_be16(p);
    maxp->fMaxComponentDepth = parse_be16(p);
    SkASSERT(p - storage == (long)size);
    return true;
}

