From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/arrow/r/R/buffer.R | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/arrow/r/R/buffer.R (limited to 'src/arrow/r/R/buffer.R') diff --git a/src/arrow/r/R/buffer.R b/src/arrow/r/R/buffer.R new file mode 100644 index 000000000..a9424fd0d --- /dev/null +++ b/src/arrow/r/R/buffer.R @@ -0,0 +1,78 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#' @title Buffer class +#' @usage NULL +#' @format NULL +#' @docType class +#' @description A Buffer is an object containing a pointer to a piece of +#' contiguous memory with a particular size. +#' @section Factory: +#' `buffer()` lets you create an `arrow::Buffer` from an R object +#' @section Methods: +#' +#' - `$is_mutable` : is this buffer mutable? +#' - `$ZeroPadding()` : zero bytes in padding, i.e. bytes between size and capacity +#' - `$size` : size in memory, in bytes +#' - `$capacity`: possible capacity, in bytes +#' +#' @rdname buffer +#' @name buffer +#' @examplesIf arrow_available() +#' my_buffer <- buffer(c(1, 2, 3, 4)) +#' my_buffer$is_mutable +#' my_buffer$ZeroPadding() +#' my_buffer$size +#' my_buffer$capacity +#' @export +#' @include arrow-package.R +#' @include enums.R +Buffer <- R6Class("Buffer", + inherit = ArrowObject, + public = list( + ZeroPadding = function() Buffer__ZeroPadding(self), + data = function() Buffer__data(self), + Equals = function(other, ...) { + inherits(other, "Buffer") && Buffer__Equals(self, other) + } + ), + active = list( + is_mutable = function() Buffer__is_mutable(self), + size = function() Buffer__size(self), + capacity = function() Buffer__capacity(self) + ) +) + +Buffer$create <- function(x) { + if (inherits(x, "Buffer")) { + x + } else if (inherits(x, c("raw", "numeric", "integer", "complex"))) { + r___RBuffer__initialize(x) + } else if (inherits(x, "BufferOutputStream")) { + x$finish() + } else { + stop("Cannot convert object of class ", class(x), " to arrow::Buffer") + } +} + +#' @param x R object. Only raw, numeric and integer vectors are currently supported +#' @return an instance of `Buffer` that borrows memory from `x` +#' @export +buffer <- Buffer$create + +#' @export +as.raw.Buffer <- function(x) x$data() -- cgit v1.2.3