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