1323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)// found in the LICENSE file.
4323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
5323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "config.h"
6323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "wtf/ArrayPiece.h"
7323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
8323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "wtf/ArrayBuffer.h"
9323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "wtf/ArrayBufferView.h"
10323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "wtf/Assertions.h"
11323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
12323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)namespace WTF {
13323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
14323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)ArrayPiece::ArrayPiece()
15323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
16323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    initNull();
17323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
18323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
19323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)ArrayPiece::ArrayPiece(void* data, unsigned byteLength)
20323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
21323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    initWithData(data, byteLength);
22323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
23323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
24323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)ArrayPiece::ArrayPiece(ArrayBuffer* buffer)
25323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
26323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    if (buffer) {
27323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        initWithData(buffer->data(), buffer->byteLength());
28323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    } else {
29323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        initNull();
30323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    }
31323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
32323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
33323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)ArrayPiece::ArrayPiece(ArrayBufferView* buffer)
34323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
35323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    if (buffer) {
36323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        initWithData(buffer->baseAddress(), buffer->byteLength());
37323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    } else {
38323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        initNull();
39323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    }
40323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
41323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
42323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)bool ArrayPiece::isNull() const
43323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
44323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    return m_isNull;
45323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
46323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
47323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void* ArrayPiece::data() const
48323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
49323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    ASSERT(!isNull());
50323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    return m_data;
51323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
52323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
53323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)unsigned char* ArrayPiece::bytes() const
54323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
55323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    return static_cast<unsigned char*>(data());
56323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
57323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
58323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)unsigned ArrayPiece::byteLength() const
59323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
60323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    ASSERT(!isNull());
61323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    return m_byteLength;
62323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
63323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
64323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void ArrayPiece::initWithData(void* data, unsigned byteLength)
65323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
66323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_byteLength = byteLength;
67323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_data = data;
68323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_isNull = false;
69323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
70323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
71323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void ArrayPiece::initNull()
72323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
73323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_byteLength = 0;
74323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_data = 0;
75323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_isNull = true;
76323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
77323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
78323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} // namespace WTF
79