27adbdd138
This adds a new read function to Dart sockets which delivers data in a system allocated buffer. For now just use that for socket input streams. The IOBuffer class does not do much at the moment, but the idea of adding it is to be able to centralize the management of the IO buffers. One thing I am considering here is to keep a cache of free buffers which can be reused without freeing and re-allocating. R=ager@google.com, ajhonsen@google.com BUG= Review URL: https://codereview.chromium.org//11338037 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@14321 260f80e4-7a28-3924-810f-c04153c831b5
27 lines
821 B
C++
27 lines
821 B
C++
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "bin/io_buffer.h"
|
|
|
|
static void BufferFree(void* buffer) {
|
|
delete[] reinterpret_cast<uint8_t*>(buffer);
|
|
}
|
|
|
|
|
|
Dart_Handle IOBuffer::Allocate(intptr_t size, uint8_t **buffer) {
|
|
uint8_t* data = new uint8_t[size];
|
|
Dart_Handle result = Dart_NewExternalByteArray(data,
|
|
size,
|
|
data,
|
|
BufferFree);
|
|
if (Dart_IsError(result)) {
|
|
BufferFree(data);
|
|
Dart_PropagateError(result);
|
|
}
|
|
if (buffer != NULL) {
|
|
*buffer = data;
|
|
}
|
|
return result;
|
|
}
|