Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python311/include/python3.11/cpython/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python311/include/python3.11/cpython/objimpl.h
#ifndef Py_CPYTHON_OBJIMPL_H
#  error "this header file must not be included directly"
#endif

#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )

/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
   vrbl-size object with nitems items, exclusive of gc overhead (if any).  The
   value is rounded up to the closest multiple of sizeof(void *), in order to
   ensure that pointer fields at the end of the object are correctly aligned
   for the platform (this is of special importance for subclasses of, e.g.,
   str or int, so that pointers can be stored after the embedded data).

   Note that there's no memory wastage in doing this, as malloc has to
   return (at worst) pointer-aligned memory anyway.
*/
#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
#   error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
#endif

#define _PyObject_VAR_SIZE(typeobj, nitems)     \
    _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
        (nitems)*(typeobj)->tp_itemsize,        \
        SIZEOF_VOID_P)


/* This example code implements an object constructor with a custom
   allocator, where PyObject_New is inlined, and shows the important
   distinction between two steps (at least):
       1) the actual allocation of the object storage;
       2) the initialization of the Python specific fields
      in this storage with PyObject_{Init, InitVar}.

   PyObject *
   YourObject_New(...)
   {
       PyObject *op;

       op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
       if (op == NULL) {
           return PyErr_NoMemory();
       }

       PyObject_Init(op, &YourTypeStruct);

       op->ob_field = value;
       ...
       return op;
   }

   Note that in C++, the use of the new operator usually implies that
   the 1st step is performed automatically for you, so in a C++ class
   constructor you would start directly with PyObject_Init/InitVar. */


typedef struct {
    /* user context passed as the first argument to the 2 functions */
    void *ctx;

    /* allocate an arena of size bytes */
    void* (*alloc) (void *ctx, size_t size);

    /* free an arena */
    void (*free) (void *ctx, void *ptr, size_t size);
} PyObjectArenaAllocator;

/* Get the arena allocator. */
PyAPI_FUNC(void) PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator);

/* Set the arena allocator. */
PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator);


/* Test if an object implements the garbage collector protocol */
PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj);


/* Code built with Py_BUILD_CORE must include pycore_gc.h instead which
   defines a different _PyGC_FINALIZED() macro. */
#ifndef Py_BUILD_CORE
   // Kept for backward compatibility with Python 3.8
#  define _PyGC_FINALIZED(o) PyObject_GC_IsFinalized(o)
#endif


// Test if a type supports weak references
PyAPI_FUNC(int) PyType_SUPPORTS_WEAKREFS(PyTypeObject *type);

PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op);
Name
Size
Permissions
Options
abstract.h
8.036 KB
-rw-r--r--
bytearrayobject.h
1.274 KB
-rw-r--r--
bytesobject.h
4.689 KB
-rw-r--r--
cellobject.h
0.706 KB
-rw-r--r--
ceval.h
1.21 KB
-rw-r--r--
classobject.h
1.617 KB
-rw-r--r--
code.h
11.215 KB
-rw-r--r--
compile.h
2.166 KB
-rw-r--r--
complexobject.h
1.219 KB
-rw-r--r--
context.h
1.913 KB
-rw-r--r--
descrobject.h
1.604 KB
-rw-r--r--
dictobject.h
3.246 KB
-rw-r--r--
fileobject.h
0.799 KB
-rw-r--r--
fileutils.h
0.227 KB
-rw-r--r--
floatobject.h
0.686 KB
-rw-r--r--
frameobject.h
1.082 KB
-rw-r--r--
funcobject.h
4.32 KB
-rw-r--r--
genobject.h
3.202 KB
-rw-r--r--
import.h
1.49 KB
-rw-r--r--
initconfig.h
7.634 KB
-rw-r--r--
listobject.h
1.728 KB
-rw-r--r--
longintrepr.h
3.728 KB
-rw-r--r--
longobject.h
4.426 KB
-rw-r--r--
methodobject.h
2.496 KB
-rw-r--r--
modsupport.h
4.202 KB
-rw-r--r--
object.h
17.876 KB
-rw-r--r--
objimpl.h
2.928 KB
-rw-r--r--
odictobject.h
1.269 KB
-rw-r--r--
picklebufobject.h
0.826 KB
-rw-r--r--
pthread_stubs.h
3.423 KB
-rw-r--r--
pyctype.h
1.354 KB
-rw-r--r--
pydebug.h
1.048 KB
-rw-r--r--
pyerrors.h
4.416 KB
-rw-r--r--
pyfpe.h
0.434 KB
-rw-r--r--
pyframe.h
0.568 KB
-rw-r--r--
pylifecycle.h
2.05 KB
-rw-r--r--
pymem.h
3.3 KB
-rw-r--r--
pystate.h
14.015 KB
-rw-r--r--
pythonrun.h
4.698 KB
-rw-r--r--
pythread.h
1.393 KB
-rw-r--r--
pytime.h
11.873 KB
-rw-r--r--
setobject.h
1.95 KB
-rw-r--r--
sysmodule.h
0.478 KB
-rw-r--r--
traceback.h
0.434 KB
-rw-r--r--
tupleobject.h
1.478 KB
-rw-r--r--
unicodeobject.h
41.737 KB
-rw-r--r--
warnings.h
0.547 KB
-rw-r--r--
weakrefobject.h
2.054 KB
-rw-r--r--