1c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org/*
2c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org * Copyright 2013 Google Inc.
3c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org *
4c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
5c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org * found in the LICENSE file.
6c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org */
7c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
8c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#ifndef SkValidatingReadBuffer_DEFINED
9c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#define SkValidatingReadBuffer_DEFINED
10c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
11c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#include "SkRefCnt.h"
128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h"
138b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h"
14c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#include "SkPath.h"
15c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#include "SkPicture.h"
16c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#include "SkReader32.h"
17c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
18c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.orgclass SkBitmap;
19c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
208b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.orgclass SkValidatingReadBuffer : public SkReadBuffer {
21c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.orgpublic:
22c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    SkValidatingReadBuffer(const void* data, size_t size);
2399e20891a080f39113bd7a5dc202730f2a13fa07robertphillips    ~SkValidatingReadBuffer() override;
2499e20891a080f39113bd7a5dc202730f2a13fa07robertphillips
2599e20891a080f39113bd7a5dc202730f2a13fa07robertphillips    SkReadBuffer* clone(const void* data, size_t size) const override {
2699e20891a080f39113bd7a5dc202730f2a13fa07robertphillips        return new SkValidatingReadBuffer(data, size);
2799e20891a080f39113bd7a5dc202730f2a13fa07robertphillips    }
28c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
2936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    const void* skip(size_t size) override;
30c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
31c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    // primitives
3236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool readBool() override;
3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkColor readColor() override;
3436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    int32_t readInt() override;
3536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkScalar readScalar() override;
3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    uint32_t readUInt() override;
3736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    int32_t read32() override;
38c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
39a3b3b238f507a6ec7f43febc6bf0bb17e04e770fmsarett    // peek
40a3b3b238f507a6ec7f43febc6bf0bb17e04e770fmsarett    uint8_t peekByte() override;
41a3b3b238f507a6ec7f43febc6bf0bb17e04e770fmsarett
42c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    // strings -- the caller is responsible for freeing the string contents
4336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readString(SkString* string) override;
44c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
45c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    // common data structures
463b37545bc594a96de45eba62dea0ce478750f2a9mtklein    SkFlattenable* readFlattenable(SkFlattenable::Type type) override;
4797bbf8211fa35bbb0811d5835cb0eaaf37cc679ebrianosman    void readColor4f(SkColor4f* color) override;
4836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readPoint(SkPoint* point) override;
4936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readMatrix(SkMatrix* matrix) override;
5036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readIRect(SkIRect* rect) override;
5136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readRect(SkRect* rect) override;
529ca06c4b00bfb9bb1a7f352efd264185e5a95fbcrobertphillips    void readRRect(SkRRect* rrect) override;
5336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readRegion(SkRegion* region) override;
5436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void readPath(SkPath* path) override;
55c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
56c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    // binary data and arrays
5736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool readByteArray(void* value, size_t size) override;
5836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool readColorArray(SkColor* colors, size_t size) override;
5997bbf8211fa35bbb0811d5835cb0eaaf37cc679ebrianosman    bool readColor4fArray(SkColor4f* colors, size_t size) override;
6036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool readIntArray(int32_t* values, size_t size) override;
6136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool readPointArray(SkPoint* points, size_t size) override;
6236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool readScalarArray(SkScalar* values, size_t size) override;
63c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
64c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    // helpers to get info about arrays and binary data
6536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    uint32_t getArrayCount() override;
66c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
6736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool validate(bool isValid) override;
6836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isValid() const override;
69c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
7036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool validateAvailable(size_t size) override;
71ef74fa189b738e13295d6a96f86a6e10223505a8commit-bot@chromium.org
72c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.orgprivate:
73025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org    bool readArray(void* value, size_t size, size_t elementSize);
74025128811219dc45fd99b6c4d1d14f833cf7a26ecommit-bot@chromium.org
75c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    void setMemory(const void* data, size_t size);
76c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
77c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    static bool IsPtrAlign4(const void* ptr) {
78c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org        return SkIsAlign4((uintptr_t)ptr);
79c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    }
80c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
81c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org    bool fError;
82c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
838b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org    typedef SkReadBuffer INHERITED;
84c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org};
85c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org
86c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org#endif // SkValidatingReadBuffer_DEFINED
87