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#include "config.h"
6#include "wtf/ArrayPiece.h"
7
8#include "wtf/ArrayBuffer.h"
9#include "wtf/ArrayBufferView.h"
10#include "wtf/Assertions.h"
11
12namespace WTF {
13
14ArrayPiece::ArrayPiece()
15{
16    initNull();
17}
18
19ArrayPiece::ArrayPiece(void* data, unsigned byteLength)
20{
21    initWithData(data, byteLength);
22}
23
24ArrayPiece::ArrayPiece(ArrayBuffer* buffer)
25{
26    if (buffer) {
27        initWithData(buffer->data(), buffer->byteLength());
28    } else {
29        initNull();
30    }
31}
32
33ArrayPiece::ArrayPiece(ArrayBufferView* buffer)
34{
35    if (buffer) {
36        initWithData(buffer->baseAddress(), buffer->byteLength());
37    } else {
38        initNull();
39    }
40}
41
42bool ArrayPiece::isNull() const
43{
44    return m_isNull;
45}
46
47void* ArrayPiece::data() const
48{
49    ASSERT(!isNull());
50    return m_data;
51}
52
53unsigned char* ArrayPiece::bytes() const
54{
55    return static_cast<unsigned char*>(data());
56}
57
58unsigned ArrayPiece::byteLength() const
59{
60    ASSERT(!isNull());
61    return m_byteLength;
62}
63
64void ArrayPiece::initWithData(void* data, unsigned byteLength)
65{
66    m_byteLength = byteLength;
67    m_data = data;
68    m_isNull = false;
69}
70
71void ArrayPiece::initNull()
72{
73    m_byteLength = 0;
74    m_data = 0;
75    m_isNull = true;
76}
77
78} // namespace WTF
79