Import @vroad byte pinning for C#

This commit is contained in:
Joshua Granick
2016-08-30 15:55:36 -07:00
parent 1ff2486474
commit bb6465fd38
3 changed files with 26 additions and 5 deletions

View File

@@ -44,6 +44,7 @@
<compilerflag value="-Iinclude" />
<file name="src/ExternalInterface.cpp" />
<file name="src/hx/CFFIExt.cpp" unless="static_link" />
<section if="LIME_CAIRO">

View File

@@ -29,6 +29,7 @@ namespace lime {
unsigned char *_data;
int _length;
value _pin;
AutoGCRoot *_root;
value _value;

View File

@@ -1,3 +1,4 @@
#include <hx/CFFIExt.h>
#include <system/System.h>
#include <utils/Bytes.h>
@@ -39,8 +40,9 @@ namespace lime {
_data = 0;
_length = 0;
_value = 0;
_pin = 0;
_root = 0;
_value = 0;
}
@@ -51,8 +53,9 @@ namespace lime {
_data = 0;
_length = 0;
_value = 0;
_pin = 0;
_root = 0;
_value = 0;
Resize (size);
@@ -65,8 +68,9 @@ namespace lime {
_data = 0;
_length = 0;
_value = 0;
_pin = 0;
_root = 0;
_value = 0;
Set (bytes);
@@ -79,8 +83,9 @@ namespace lime {
_data = 0;
_length = 0;
_value = 0;
_pin = 0;
_root = 0;
_value = 0;
FILE_HANDLE *file = lime::fopen (path, "rb");
@@ -112,8 +117,9 @@ namespace lime {
_data = 0;
_length = 0;
_value = 0;
_pin = 0;
_root = 0;
_value = 0;
Set (data);
@@ -122,6 +128,12 @@ namespace lime {
Bytes::~Bytes () {
if (_pin) {
EXT_unpin_buffer (_pin);
}
if (_root) {
delete _root;
@@ -298,6 +310,13 @@ namespace lime {
if (_value) {
if (!_pin && HAS_pin_buffer ()) {
buffer b = val_to_buffer (val_field (_value, id_b));
_pin = EXT_pin_buffer (b);
}
return _value;
} else {