• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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