blob: 4fdc5bcc7380ff4acf42be8d57ed2547131f2f3c [file] [log] [blame]
/*
* 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.
*/
#include <arrow-glib/memory-pool.hpp>
G_BEGIN_DECLS
/**
* SECTION: memory-pool
* @section_id: memory-pool-classes
* @title: Memory pool classes
* @include: arrow-glib/arrow-glib.h
*
* #GArrowMemoryPool is a class for memory allocation.
*/
typedef struct GArrowMemoryPoolPrivate_
{
arrow::MemoryPool *memory_pool;
} GArrowMemoryPoolPrivate;
enum {
PROP_MEMORY_POOL = 1,
};
G_DEFINE_TYPE_WITH_PRIVATE(GArrowMemoryPool, garrow_memory_pool, G_TYPE_OBJECT)
#define GARROW_MEMORY_POOL_GET_PRIVATE(obj) \
static_cast<GArrowMemoryPoolPrivate *>( \
garrow_memory_pool_get_instance_private(GARROW_MEMORY_POOL(obj)))
static void
garrow_memory_pool_set_property(GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
auto priv = GARROW_MEMORY_POOL_GET_PRIVATE(object);
switch (prop_id) {
case PROP_MEMORY_POOL:
priv->memory_pool = static_cast<arrow::MemoryPool *>(g_value_get_pointer(value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}
static void
garrow_memory_pool_init(GArrowMemoryPool *object)
{
}
static void
garrow_memory_pool_class_init(GArrowMemoryPoolClass *klass)
{
GParamSpec *spec;
auto gobject_class = G_OBJECT_CLASS(klass);
gobject_class->set_property = garrow_memory_pool_set_property;
spec = g_param_spec_pointer(
"memory-pool",
"Memory Pool",
"The raw arrow::MemoryPool *",
static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property(gobject_class, PROP_MEMORY_POOL, spec);
}
/**
* garrow_memory_pool_default:
*
* Returns: (transfer full): The process-wide default memory pool.
*
* Since: 9.0.0
*/
GArrowMemoryPool *
garrow_memory_pool_default()
{
auto memory_pool = arrow::default_memory_pool();
return garrow_memory_pool_new_raw(memory_pool);
}
/**
* garrow_memory_pool_get_bytes_allocated:
* @memory_pool: A #GArrowMemoryPool.
*
* Returns: The number of bytes that were allocated and not yet free’d
* through this allocator.
*
* Since: 9.0.0
*/
gint64
garrow_memory_pool_get_bytes_allocated(GArrowMemoryPool *memory_pool)
{
auto arrow_memory_pool = garrow_memory_pool_get_raw(memory_pool);
return arrow_memory_pool->bytes_allocated();
}
/**
* garrow_memory_pool_get_max_memory:
* @memory_pool: A #GArrowMemoryPool.
*
* Return peak memory allocation in this memory pool.
*
* Returns: Maximum bytes allocated. If not known (or not implemented),
* returns -1.
*
* Since: 9.0.0
*/
gint64
garrow_memory_pool_get_max_memory(GArrowMemoryPool *memory_pool)
{
auto arrow_memory_pool = garrow_memory_pool_get_raw(memory_pool);
return arrow_memory_pool->max_memory();
}
/**
* garrow_memory_pool_get_backend_name:
* @memory_pool: A #GArrowMemoryPool.
*
* Returns: The name of the backend used by this MemoryPool
* (e.g. "system" or "jemalloc").
*
* It should be freed with g_free() when no longer needed.
*
* Since: 9.0.0
*/
gchar *
garrow_memory_pool_get_backend_name(GArrowMemoryPool *memory_pool)
{
auto arrow_memory_pool = garrow_memory_pool_get_raw(memory_pool);
const auto name = arrow_memory_pool->backend_name();
return g_strdup(name.c_str());
}
G_END_DECLS
GArrowMemoryPool *
garrow_memory_pool_new_raw(arrow::MemoryPool *memory_pool)
{
return GARROW_MEMORY_POOL(
g_object_new(GARROW_TYPE_MEMORY_POOL, "memory-pool", memory_pool, NULL));
}
arrow::MemoryPool *
garrow_memory_pool_get_raw(GArrowMemoryPool *memory_pool)
{
if (!memory_pool)
return nullptr;
auto priv = GARROW_MEMORY_POOL_GET_PRIVATE(memory_pool);
return priv->memory_pool;
}