1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ArrayPiece_h 6 #define ArrayPiece_h 7 8 #include "wtf/Forward.h" 9 #include "wtf/WTFExport.h" 10 11 namespace WTF { 12 13 // This class is for passing around un-owned bytes as a pointer + length. 14 // It supports implicit conversion from several other data types. 15 // 16 // ArrayPiece has the concept of being "null". This is different from an empty 17 // byte range. It is invalid to call methods other than isNull() on such 18 // instances. 19 // 20 // IMPORTANT: The data contained by ArrayPiece is NOT OWNED, so caution must be 21 // taken to ensure it is kept alive. 22 class WTF_EXPORT ArrayPiece { 23 public: 24 // Constructs a "null" ArrayPiece object. 25 ArrayPiece(); 26 27 ArrayPiece(void* data, unsigned byteLength); 28 29 // Constructs an ArrayPiece from the given ArrayBuffer. If the input is a 30 // nullptr, then the constructed instance will be isNull(). 31 ArrayPiece(ArrayBuffer*); 32 ArrayPiece(ArrayBufferView*); 33 34 bool isNull() const; 35 void* data() const; 36 unsigned char* bytes() const; 37 unsigned byteLength() const; 38 39 private: 40 void initWithData(void* data, unsigned byteLength); 41 void initNull(); 42 43 void* m_data; 44 unsigned m_byteLength; 45 bool m_isNull; 46 }; 47 48 } // namespace WTF 49 50 using WTF::ArrayPiece; 51 52 #endif // ArrayPiece_h 53