PHP 8.3.31
Preview: greenlet_allocator.hpp Size: 1.79 KB
/opt/hc_python/lib/python3.12/site-packages/greenlet/greenlet_allocator.hpp

#ifndef GREENLET_ALLOCATOR_HPP
#define GREENLET_ALLOCATOR_HPP

#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <memory>
#include "greenlet_compiler_compat.hpp"
#include "greenlet_cpython_compat.hpp"


namespace greenlet
{
    // This allocator is stateless; all instances are identical.
    // It can *ONLY* be used when we're sure we're holding the GIL
    // (Python's allocators require the GIL).
    template <class T>
    struct PythonAllocator : public std::allocator<T> {

        PythonAllocator(const PythonAllocator& UNUSED(other))
            : std::allocator<T>()
        {
        }

        PythonAllocator(const std::allocator<T> other)
            : std::allocator<T>(other)
        {}

        template <class U>
        PythonAllocator(const std::allocator<U>& other)
            : std::allocator<T>(other)
        {
        }

        PythonAllocator() : std::allocator<T>() {}

        T* allocate(size_t number_objects, const void* UNUSED(hint)=0)
        {
            void* p;
            if (number_objects == 1) {
#ifdef Py_GIL_DISABLED
                p = PyMem_Malloc(sizeof(T) * number_objects);
#else
                p = PyObject_Malloc(sizeof(T));
#endif
            }
            else {
                p = PyMem_Malloc(sizeof(T) * number_objects);
            }
            return static_cast<T*>(p);
        }

        void deallocate(T* t, size_t n)
        {
            void* p = t;
            if (n == 1) {
#ifdef Py_GIL_DISABLED
                PyMem_Free(p);
#else
                PyObject_Free(p);
#endif
            }
            else {
                PyMem_Free(p);
            }
        }
        // This member is deprecated in C++17 and removed in C++20
        template< class U >
        struct rebind {
            typedef PythonAllocator<U> other;
        };

    };

}

#endif

Directory Contents

Dirs: 3 × Files: 31

Name Size Perms Modified Actions
platform DIR
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
tests DIR
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
3.57 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
10.83 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
4.64 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
1.79 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
4.24 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
3.25 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
4.40 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
2.70 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
3.12 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
37.17 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
3.22 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
867 B lrw-r--r-- 2026-06-11 06:30:31
Edit Download
27.52 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
1.43 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
4.06 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
8.59 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
3.87 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
1021 B lrw-r--r-- 2026-06-11 06:30:31
Edit Download
1.33 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
25.62 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
28.58 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
3.84 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
3.51 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
19.15 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
7.21 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
23.34 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
2.70 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
7.99 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
23.76 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download
1.32 MB lrwxr-xr-x 2026-06-11 06:30:31
Edit Download
1.41 KB lrw-r--r-- 2026-06-11 06:30:31
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).