Cython 3.3.0a1__cp315-cp315-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Cython/Build/BuildExecutable.py +156 -0
- Cython/Build/Cache.py +199 -0
- Cython/Build/Cythonize.py +349 -0
- Cython/Build/Dependencies.py +1276 -0
- Cython/Build/Distutils.py +1 -0
- Cython/Build/Inline.py +467 -0
- Cython/Build/IpythonMagic.py +559 -0
- Cython/Build/SharedModule.py +84 -0
- Cython/Build/Tests/TestCyCache.py +195 -0
- Cython/Build/Tests/TestCythonizeArgsParser.py +480 -0
- Cython/Build/Tests/TestDependencies.py +133 -0
- Cython/Build/Tests/TestInline.py +177 -0
- Cython/Build/Tests/TestIpythonMagic.py +303 -0
- Cython/Build/Tests/TestRecythonize.py +212 -0
- Cython/Build/Tests/TestStripLiterals.py +155 -0
- Cython/Build/Tests/__init__.py +1 -0
- Cython/Build/__init__.py +11 -0
- Cython/CodeWriter.py +815 -0
- Cython/Compiler/AnalysedTreeTransforms.py +97 -0
- Cython/Compiler/Annotate.py +328 -0
- Cython/Compiler/AutoDocTransforms.py +320 -0
- Cython/Compiler/Buffer.py +680 -0
- Cython/Compiler/Builtin.py +997 -0
- Cython/Compiler/CmdLine.py +263 -0
- Cython/Compiler/Code.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/Code.pxd +152 -0
- Cython/Compiler/Code.py +3907 -0
- Cython/Compiler/CodeGeneration.py +33 -0
- Cython/Compiler/CythonScope.py +194 -0
- Cython/Compiler/Dataclass.py +890 -0
- Cython/Compiler/DebugFlags.py +24 -0
- Cython/Compiler/Errors.py +310 -0
- Cython/Compiler/ExprNodes.py +15983 -0
- Cython/Compiler/FlowControl.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/FlowControl.pxd +99 -0
- Cython/Compiler/FlowControl.py +1571 -0
- Cython/Compiler/FusedNode.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/FusedNode.py +976 -0
- Cython/Compiler/Future.py +16 -0
- Cython/Compiler/Interpreter.py +57 -0
- Cython/Compiler/Lexicon.py +422 -0
- Cython/Compiler/LineTable.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/LineTable.py +114 -0
- Cython/Compiler/Main.py +856 -0
- Cython/Compiler/MatchCaseNodes.py +2197 -0
- Cython/Compiler/MemoryView.py +930 -0
- Cython/Compiler/ModuleNode.py +4517 -0
- Cython/Compiler/Naming.py +367 -0
- Cython/Compiler/Nodes.py +10941 -0
- Cython/Compiler/Optimize.py +5455 -0
- Cython/Compiler/Options.py +838 -0
- Cython/Compiler/ParseTreeTransforms.pxd +79 -0
- Cython/Compiler/ParseTreeTransforms.py +4744 -0
- Cython/Compiler/Parsing.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/Parsing.pxd +9 -0
- Cython/Compiler/Parsing.py +4792 -0
- Cython/Compiler/Pipeline.py +439 -0
- Cython/Compiler/PyrexTypes.py +6111 -0
- Cython/Compiler/Pythran.py +232 -0
- Cython/Compiler/Scanning.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/Scanning.pxd +70 -0
- Cython/Compiler/Scanning.py +720 -0
- Cython/Compiler/StringEncoding.py +297 -0
- Cython/Compiler/Symtab.py +3092 -0
- Cython/Compiler/Tests/TestBuffer.py +105 -0
- Cython/Compiler/Tests/TestBuiltin.py +117 -0
- Cython/Compiler/Tests/TestCmdLine.py +587 -0
- Cython/Compiler/Tests/TestCode.py +145 -0
- Cython/Compiler/Tests/TestFlowControl.py +65 -0
- Cython/Compiler/Tests/TestGrammar.py +202 -0
- Cython/Compiler/Tests/TestMemView.py +71 -0
- Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
- Cython/Compiler/Tests/TestScanning.py +132 -0
- Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
- Cython/Compiler/Tests/TestStringEncoding.py +20 -0
- Cython/Compiler/Tests/TestTreeFragment.py +63 -0
- Cython/Compiler/Tests/TestTreePath.py +103 -0
- Cython/Compiler/Tests/TestTypes.py +118 -0
- Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
- Cython/Compiler/Tests/TestVisitor.py +61 -0
- Cython/Compiler/Tests/Utils.py +36 -0
- Cython/Compiler/Tests/__init__.py +1 -0
- Cython/Compiler/TreeFragment.py +278 -0
- Cython/Compiler/TreePath.py +303 -0
- Cython/Compiler/TypeInference.py +611 -0
- Cython/Compiler/TypeSlots.py +1329 -0
- Cython/Compiler/UFuncs.py +311 -0
- Cython/Compiler/UtilNodes.py +413 -0
- Cython/Compiler/UtilityCode.py +348 -0
- Cython/Compiler/Version.py +8 -0
- Cython/Compiler/Visitor.cp315-win_amd64.pyd +0 -0
- Cython/Compiler/Visitor.pxd +53 -0
- Cython/Compiler/Visitor.py +864 -0
- Cython/Compiler/__init__.py +1 -0
- Cython/Coverage.py +448 -0
- Cython/Debugger/Cygdb.py +177 -0
- Cython/Debugger/DebugWriter.py +82 -0
- Cython/Debugger/Tests/TestLibCython.py +280 -0
- Cython/Debugger/Tests/__init__.py +1 -0
- Cython/Debugger/Tests/cfuncs.c +8 -0
- Cython/Debugger/Tests/codefile +49 -0
- Cython/Debugger/Tests/test_libcython_in_gdb.py +580 -0
- Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
- Cython/Debugger/__init__.py +1 -0
- Cython/Debugger/libcython.py +1548 -0
- Cython/Debugger/libpython.py +2821 -0
- Cython/Debugging.py +20 -0
- Cython/Distutils/__init__.py +2 -0
- Cython/Distutils/build_ext.py +139 -0
- Cython/Distutils/extension.py +96 -0
- Cython/Distutils/old_build_ext.py +351 -0
- Cython/Includes/cpython/__init__.pxd +173 -0
- Cython/Includes/cpython/array.pxd +152 -0
- Cython/Includes/cpython/bool.pxd +37 -0
- Cython/Includes/cpython/buffer.pxd +112 -0
- Cython/Includes/cpython/bytearray.pxd +33 -0
- Cython/Includes/cpython/bytes.pxd +200 -0
- Cython/Includes/cpython/cellobject.pxd +35 -0
- Cython/Includes/cpython/ceval.pxd +8 -0
- Cython/Includes/cpython/codecs.pxd +121 -0
- Cython/Includes/cpython/complex.pxd +60 -0
- Cython/Includes/cpython/contextvars.pxd +145 -0
- Cython/Includes/cpython/conversion.pxd +36 -0
- Cython/Includes/cpython/datetime.pxd +395 -0
- Cython/Includes/cpython/descr.pxd +26 -0
- Cython/Includes/cpython/dict.pxd +268 -0
- Cython/Includes/cpython/exc.pxd +263 -0
- Cython/Includes/cpython/fileobject.pxd +57 -0
- Cython/Includes/cpython/float.pxd +56 -0
- Cython/Includes/cpython/frozendict.pxd +37 -0
- Cython/Includes/cpython/function.pxd +65 -0
- Cython/Includes/cpython/genobject.pxd +25 -0
- Cython/Includes/cpython/getargs.pxd +12 -0
- Cython/Includes/cpython/instance.pxd +25 -0
- Cython/Includes/cpython/iterator.pxd +36 -0
- Cython/Includes/cpython/iterobject.pxd +24 -0
- Cython/Includes/cpython/list.pxd +144 -0
- Cython/Includes/cpython/long.pxd +180 -0
- Cython/Includes/cpython/longintrepr.pxd +14 -0
- Cython/Includes/cpython/mapping.pxd +63 -0
- Cython/Includes/cpython/marshal.pxd +66 -0
- Cython/Includes/cpython/mem.pxd +120 -0
- Cython/Includes/cpython/memoryview.pxd +50 -0
- Cython/Includes/cpython/method.pxd +49 -0
- Cython/Includes/cpython/module.pxd +208 -0
- Cython/Includes/cpython/number.pxd +258 -0
- Cython/Includes/cpython/object.pxd +430 -0
- Cython/Includes/cpython/pycapsule.pxd +143 -0
- Cython/Includes/cpython/pylifecycle.pxd +68 -0
- Cython/Includes/cpython/pyport.pxd +8 -0
- Cython/Includes/cpython/pystate.pxd +95 -0
- Cython/Includes/cpython/pythread.pxd +53 -0
- Cython/Includes/cpython/ref.pxd +141 -0
- Cython/Includes/cpython/sentinel.pxd +17 -0
- Cython/Includes/cpython/sequence.pxd +134 -0
- Cython/Includes/cpython/set.pxd +119 -0
- Cython/Includes/cpython/slice.pxd +70 -0
- Cython/Includes/cpython/time.pxd +129 -0
- Cython/Includes/cpython/tuple.pxd +72 -0
- Cython/Includes/cpython/type.pxd +146 -0
- Cython/Includes/cpython/unicode.pxd +639 -0
- Cython/Includes/cpython/version.pxd +32 -0
- Cython/Includes/cpython/weakref.pxd +78 -0
- Cython/Includes/libc/__init__.pxd +1 -0
- Cython/Includes/libc/complex.pxd +35 -0
- Cython/Includes/libc/errno.pxd +127 -0
- Cython/Includes/libc/float.pxd +43 -0
- Cython/Includes/libc/limits.pxd +28 -0
- Cython/Includes/libc/locale.pxd +46 -0
- Cython/Includes/libc/math.pxd +209 -0
- Cython/Includes/libc/setjmp.pxd +10 -0
- Cython/Includes/libc/signal.pxd +64 -0
- Cython/Includes/libc/stddef.pxd +9 -0
- Cython/Includes/libc/stdint.pxd +105 -0
- Cython/Includes/libc/stdio.pxd +80 -0
- Cython/Includes/libc/stdlib.pxd +72 -0
- Cython/Includes/libc/string.pxd +50 -0
- Cython/Includes/libc/threads.pxd +234 -0
- Cython/Includes/libc/time.pxd +52 -0
- Cython/Includes/libcpp/__init__.pxd +4 -0
- Cython/Includes/libcpp/algorithm.pxd +320 -0
- Cython/Includes/libcpp/any.pxd +16 -0
- Cython/Includes/libcpp/atomic.pxd +59 -0
- Cython/Includes/libcpp/barrier.pxd +22 -0
- Cython/Includes/libcpp/bit.pxd +29 -0
- Cython/Includes/libcpp/cast.pxd +12 -0
- Cython/Includes/libcpp/cmath.pxd +518 -0
- Cython/Includes/libcpp/complex.pxd +106 -0
- Cython/Includes/libcpp/condition_variable.pxd +322 -0
- Cython/Includes/libcpp/deque.pxd +165 -0
- Cython/Includes/libcpp/exception.pxd +216 -0
- Cython/Includes/libcpp/execution.pxd +15 -0
- Cython/Includes/libcpp/forward_list.pxd +63 -0
- Cython/Includes/libcpp/functional.pxd +26 -0
- Cython/Includes/libcpp/future.pxd +103 -0
- Cython/Includes/libcpp/iterator.pxd +34 -0
- Cython/Includes/libcpp/latch.pxd +17 -0
- Cython/Includes/libcpp/limits.pxd +61 -0
- Cython/Includes/libcpp/list.pxd +117 -0
- Cython/Includes/libcpp/map.pxd +252 -0
- Cython/Includes/libcpp/memory.pxd +115 -0
- Cython/Includes/libcpp/mutex.pxd +387 -0
- Cython/Includes/libcpp/numbers.pxd +15 -0
- Cython/Includes/libcpp/numeric.pxd +131 -0
- Cython/Includes/libcpp/optional.pxd +34 -0
- Cython/Includes/libcpp/pair.pxd +1 -0
- Cython/Includes/libcpp/queue.pxd +25 -0
- Cython/Includes/libcpp/random.pxd +166 -0
- Cython/Includes/libcpp/semaphore.pxd +43 -0
- Cython/Includes/libcpp/set.pxd +228 -0
- Cython/Includes/libcpp/shared_mutex.pxd +96 -0
- Cython/Includes/libcpp/span.pxd +87 -0
- Cython/Includes/libcpp/stack.pxd +11 -0
- Cython/Includes/libcpp/stop_token.pxd +117 -0
- Cython/Includes/libcpp/string.pxd +355 -0
- Cython/Includes/libcpp/string_view.pxd +183 -0
- Cython/Includes/libcpp/typeindex.pxd +15 -0
- Cython/Includes/libcpp/typeinfo.pxd +10 -0
- Cython/Includes/libcpp/unordered_map.pxd +193 -0
- Cython/Includes/libcpp/unordered_set.pxd +152 -0
- Cython/Includes/libcpp/utility.pxd +30 -0
- Cython/Includes/libcpp/vector.pxd +186 -0
- Cython/Includes/numpy/math.pxd +150 -0
- Cython/Includes/openmp.pxd +50 -0
- Cython/Includes/posix/__init__.pxd +1 -0
- Cython/Includes/posix/dlfcn.pxd +14 -0
- Cython/Includes/posix/fcntl.pxd +86 -0
- Cython/Includes/posix/ioctl.pxd +4 -0
- Cython/Includes/posix/mman.pxd +101 -0
- Cython/Includes/posix/resource.pxd +57 -0
- Cython/Includes/posix/select.pxd +21 -0
- Cython/Includes/posix/signal.pxd +73 -0
- Cython/Includes/posix/stat.pxd +98 -0
- Cython/Includes/posix/stdio.pxd +37 -0
- Cython/Includes/posix/stdlib.pxd +29 -0
- Cython/Includes/posix/strings.pxd +9 -0
- Cython/Includes/posix/time.pxd +71 -0
- Cython/Includes/posix/types.pxd +30 -0
- Cython/Includes/posix/uio.pxd +26 -0
- Cython/Includes/posix/unistd.pxd +271 -0
- Cython/Includes/posix/wait.pxd +38 -0
- Cython/LZSS.py +170 -0
- Cython/Plex/Actions.cp315-win_amd64.pyd +0 -0
- Cython/Plex/Actions.pxd +24 -0
- Cython/Plex/Actions.py +119 -0
- Cython/Plex/DFA.cp315-win_amd64.pyd +0 -0
- Cython/Plex/DFA.pxd +14 -0
- Cython/Plex/DFA.py +164 -0
- Cython/Plex/Errors.py +48 -0
- Cython/Plex/Lexicons.py +178 -0
- Cython/Plex/Machines.cp315-win_amd64.pyd +0 -0
- Cython/Plex/Machines.pxd +36 -0
- Cython/Plex/Machines.py +238 -0
- Cython/Plex/Regexps.py +535 -0
- Cython/Plex/Scanners.cp315-win_amd64.pyd +0 -0
- Cython/Plex/Scanners.pxd +45 -0
- Cython/Plex/Scanners.py +328 -0
- Cython/Plex/Transitions.cp315-win_amd64.pyd +0 -0
- Cython/Plex/Transitions.pxd +14 -0
- Cython/Plex/Transitions.py +239 -0
- Cython/Plex/__init__.py +34 -0
- Cython/Runtime/__init__.py +1 -0
- Cython/Runtime/refnanny.cp315-win_amd64.pyd +0 -0
- Cython/Runtime/refnanny.pyx +237 -0
- Cython/Shadow.py +1167 -0
- Cython/StringIOTree.cp315-win_amd64.pyd +0 -0
- Cython/StringIOTree.py +169 -0
- Cython/Tempita/__init__.py +4 -0
- Cython/Tempita/_looper.py +154 -0
- Cython/Tempita/_tempita.cp315-win_amd64.pyd +0 -0
- Cython/Tempita/_tempita.py +1087 -0
- Cython/TestUtils.py +464 -0
- Cython/Tests/TestCodeWriter.py +128 -0
- Cython/Tests/TestCythonUtils.py +202 -0
- Cython/Tests/TestJediTyper.py +223 -0
- Cython/Tests/TestShadow.py +110 -0
- Cython/Tests/TestStringIOTree.py +68 -0
- Cython/Tests/TestTestUtils.py +89 -0
- Cython/Tests/__init__.py +1 -0
- Cython/Tests/xmlrunner.py +390 -0
- Cython/Utility/AsyncGen.c +1073 -0
- Cython/Utility/Buffer.c +866 -0
- Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
- Cython/Utility/Builtins.c +933 -0
- Cython/Utility/CConvert.pyx +149 -0
- Cython/Utility/CMath.c +104 -0
- Cython/Utility/CommonStructures.c +244 -0
- Cython/Utility/Complex.c +378 -0
- Cython/Utility/Coroutine.c +2337 -0
- Cython/Utility/CpdefEnums.pyx +107 -0
- Cython/Utility/CppConvert.pyx +282 -0
- Cython/Utility/CppSupport.cpp +151 -0
- Cython/Utility/CythonFunction.c +2072 -0
- Cython/Utility/Dataclasses.c +101 -0
- Cython/Utility/Embed.c +129 -0
- Cython/Utility/Exceptions.c +1038 -0
- Cython/Utility/ExtensionTypes.c +1158 -0
- Cython/Utility/FunctionArguments.c +1045 -0
- Cython/Utility/FusedFunction.pyx +44 -0
- Cython/Utility/ImportExport.c +930 -0
- Cython/Utility/MatchCase.c +979 -0
- Cython/Utility/MatchCase_Cy.pyx +12 -0
- Cython/Utility/MemoryView.pxd +108 -0
- Cython/Utility/MemoryView.pyx +1499 -0
- Cython/Utility/MemoryView_C.c +1056 -0
- Cython/Utility/ModuleSetupCode.c +3352 -0
- Cython/Utility/NumpyImportArray.c +46 -0
- Cython/Utility/ObjectHandling.c +3372 -0
- Cython/Utility/Optimize.c +2563 -0
- Cython/Utility/Overflow.c +378 -0
- Cython/Utility/Profile.c +736 -0
- Cython/Utility/StringTools.c +1414 -0
- Cython/Utility/Synchronization.c +438 -0
- Cython/Utility/TString.c +369 -0
- Cython/Utility/TestCyUtilityLoader.pyx +8 -0
- Cython/Utility/TestCythonScope.pyx +75 -0
- Cython/Utility/TestUtilityLoader.c +12 -0
- Cython/Utility/TypeConversion.c +1556 -0
- Cython/Utility/UFuncs.pyx +50 -0
- Cython/Utility/UFuncs_C.c +89 -0
- Cython/Utility/__init__.py +28 -0
- Cython/Utility/arrayarray.h +172 -0
- Cython/Utils.cp315-win_amd64.pyd +0 -0
- Cython/Utils.py +677 -0
- Cython/__init__.py +12 -0
- Cython/py.typed +0 -0
- cython-3.3.0a1.dist-info/METADATA +394 -0
- cython-3.3.0a1.dist-info/RECORD +335 -0
- cython-3.3.0a1.dist-info/WHEEL +5 -0
- cython-3.3.0a1.dist-info/entry_points.txt +4 -0
- cython-3.3.0a1.dist-info/top_level.txt +3 -0
- cython.py +29 -0
- pyximport/__init__.py +4 -0
- pyximport/pyxbuild.py +160 -0
- pyximport/pyximport.py +482 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Longness only used for type promotion.
|
|
2
|
+
# Actual compile time size used for conversions.
|
|
3
|
+
|
|
4
|
+
# 7.18 Integer types <stdint.h>
|
|
5
|
+
cdef extern from "<stdint.h>" nogil:
|
|
6
|
+
|
|
7
|
+
# 7.18.1 Integer types
|
|
8
|
+
# 7.18.1.1 Exact-width integer types
|
|
9
|
+
ctypedef signed char int8_t
|
|
10
|
+
ctypedef signed short int16_t
|
|
11
|
+
ctypedef signed int int32_t
|
|
12
|
+
ctypedef signed long int64_t
|
|
13
|
+
ctypedef unsigned char uint8_t
|
|
14
|
+
ctypedef unsigned short uint16_t
|
|
15
|
+
ctypedef unsigned int uint32_t
|
|
16
|
+
ctypedef unsigned long long uint64_t
|
|
17
|
+
# 7.18.1.2 Minimum-width integer types
|
|
18
|
+
ctypedef signed char int_least8_t
|
|
19
|
+
ctypedef signed short int_least16_t
|
|
20
|
+
ctypedef signed int int_least32_t
|
|
21
|
+
ctypedef signed long int_least64_t
|
|
22
|
+
ctypedef unsigned char uint_least8_t
|
|
23
|
+
ctypedef unsigned short uint_least16_t
|
|
24
|
+
ctypedef unsigned int uint_least32_t
|
|
25
|
+
ctypedef unsigned long long uint_least64_t
|
|
26
|
+
# 7.18.1.3 Fastest minimum-width integer types
|
|
27
|
+
ctypedef signed char int_fast8_t
|
|
28
|
+
ctypedef signed short int_fast16_t
|
|
29
|
+
ctypedef signed int int_fast32_t
|
|
30
|
+
ctypedef signed long int_fast64_t
|
|
31
|
+
ctypedef unsigned char uint_fast8_t
|
|
32
|
+
ctypedef unsigned short uint_fast16_t
|
|
33
|
+
ctypedef unsigned int uint_fast32_t
|
|
34
|
+
ctypedef unsigned long long uint_fast64_t
|
|
35
|
+
# 7.18.1.4 Integer types capable of holding object pointers
|
|
36
|
+
ctypedef ssize_t intptr_t
|
|
37
|
+
ctypedef size_t uintptr_t
|
|
38
|
+
# 7.18.1.5 Greatest-width integer types
|
|
39
|
+
ctypedef signed long long intmax_t
|
|
40
|
+
ctypedef unsigned long long uintmax_t
|
|
41
|
+
|
|
42
|
+
# 7.18.2 Limits of specified-width integer types
|
|
43
|
+
# 7.18.2.1 Limits of exact-width integer types
|
|
44
|
+
int8_t INT8_MIN
|
|
45
|
+
int16_t INT16_MIN
|
|
46
|
+
int32_t INT32_MIN
|
|
47
|
+
int64_t INT64_MIN
|
|
48
|
+
int8_t INT8_MAX
|
|
49
|
+
int16_t INT16_MAX
|
|
50
|
+
int32_t INT32_MAX
|
|
51
|
+
int64_t INT64_MAX
|
|
52
|
+
uint8_t UINT8_MAX
|
|
53
|
+
uint16_t UINT16_MAX
|
|
54
|
+
uint32_t UINT32_MAX
|
|
55
|
+
uint64_t UINT64_MAX
|
|
56
|
+
#7.18.2.2 Limits of minimum-width integer types
|
|
57
|
+
int_least8_t INT_LEAST8_MIN
|
|
58
|
+
int_least16_t INT_LEAST16_MIN
|
|
59
|
+
int_least32_t INT_LEAST32_MIN
|
|
60
|
+
int_least64_t INT_LEAST64_MIN
|
|
61
|
+
int_least8_t INT_LEAST8_MAX
|
|
62
|
+
int_least16_t INT_LEAST16_MAX
|
|
63
|
+
int_least32_t INT_LEAST32_MAX
|
|
64
|
+
int_least64_t INT_LEAST64_MAX
|
|
65
|
+
uint_least8_t UINT_LEAST8_MAX
|
|
66
|
+
uint_least16_t UINT_LEAST16_MAX
|
|
67
|
+
uint_least32_t UINT_LEAST32_MAX
|
|
68
|
+
uint_least64_t UINT_LEAST64_MAX
|
|
69
|
+
#7.18.2.3 Limits of fastest minimum-width integer types
|
|
70
|
+
int_fast8_t INT_FAST8_MIN
|
|
71
|
+
int_fast16_t INT_FAST16_MIN
|
|
72
|
+
int_fast32_t INT_FAST32_MIN
|
|
73
|
+
int_fast64_t INT_FAST64_MIN
|
|
74
|
+
int_fast8_t INT_FAST8_MAX
|
|
75
|
+
int_fast16_t INT_FAST16_MAX
|
|
76
|
+
int_fast32_t INT_FAST32_MAX
|
|
77
|
+
int_fast64_t INT_FAST64_MAX
|
|
78
|
+
uint_fast8_t UINT_FAST8_MAX
|
|
79
|
+
uint_fast16_t UINT_FAST16_MAX
|
|
80
|
+
uint_fast32_t UINT_FAST32_MAX
|
|
81
|
+
uint_fast64_t UINT_FAST64_MAX
|
|
82
|
+
#7.18.2.4 Limits of integer types capable of holding object pointers
|
|
83
|
+
enum: INTPTR_MIN
|
|
84
|
+
enum: INTPTR_MAX
|
|
85
|
+
enum: UINTPTR_MAX
|
|
86
|
+
# 7.18.2.5 Limits of greatest-width integer types
|
|
87
|
+
enum: INTMAX_MAX
|
|
88
|
+
enum: INTMAX_MIN
|
|
89
|
+
enum: UINTMAX_MAX
|
|
90
|
+
|
|
91
|
+
# 7.18.3 Limits of other integer types
|
|
92
|
+
# ptrdiff_t
|
|
93
|
+
enum: PTRDIFF_MIN
|
|
94
|
+
enum: PTRDIFF_MAX
|
|
95
|
+
# sig_atomic_t
|
|
96
|
+
enum: SIG_ATOMIC_MIN
|
|
97
|
+
enum: SIG_ATOMIC_MAX
|
|
98
|
+
# size_t
|
|
99
|
+
size_t SIZE_MAX
|
|
100
|
+
# wchar_t
|
|
101
|
+
enum: WCHAR_MIN
|
|
102
|
+
enum: WCHAR_MAX
|
|
103
|
+
# wint_t
|
|
104
|
+
enum: WINT_MIN
|
|
105
|
+
enum: WINT_MAX
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# 7.19 Input/output <stdio.h>
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# deprecated cimports for backwards compatibility:
|
|
5
|
+
from libc.string cimport const_char, const_void
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
cdef extern from "<stdio.h>" nogil:
|
|
9
|
+
|
|
10
|
+
ctypedef struct FILE
|
|
11
|
+
cdef FILE *stdin
|
|
12
|
+
cdef FILE *stdout
|
|
13
|
+
cdef FILE *stderr
|
|
14
|
+
|
|
15
|
+
enum: FOPEN_MAX
|
|
16
|
+
enum: FILENAME_MAX
|
|
17
|
+
FILE *fopen (const char *filename, const char *opentype)
|
|
18
|
+
FILE *freopen (const char *filename, const char *opentype, FILE *stream)
|
|
19
|
+
FILE *fdopen (int fdescriptor, const char *opentype)
|
|
20
|
+
int fclose (FILE *stream)
|
|
21
|
+
int remove (const char *filename)
|
|
22
|
+
int rename (const char *oldname, const char *newname)
|
|
23
|
+
FILE *tmpfile ()
|
|
24
|
+
|
|
25
|
+
int remove (const char *pathname)
|
|
26
|
+
int rename (const char *oldpath, const char *newpath)
|
|
27
|
+
|
|
28
|
+
enum: _IOFBF
|
|
29
|
+
enum: _IOLBF
|
|
30
|
+
enum: _IONBF
|
|
31
|
+
int setvbuf (FILE *stream, char *buf, int mode, size_t size)
|
|
32
|
+
enum: BUFSIZ
|
|
33
|
+
void setbuf (FILE *stream, char *buf)
|
|
34
|
+
|
|
35
|
+
size_t fread (void *data, size_t size, size_t count, FILE *stream)
|
|
36
|
+
size_t fwrite (const void *data, size_t size, size_t count, FILE *stream)
|
|
37
|
+
int fflush (FILE *stream)
|
|
38
|
+
|
|
39
|
+
enum: EOF
|
|
40
|
+
void clearerr (FILE *stream)
|
|
41
|
+
int feof (FILE *stream)
|
|
42
|
+
int ferror (FILE *stream)
|
|
43
|
+
|
|
44
|
+
enum: SEEK_SET
|
|
45
|
+
enum: SEEK_CUR
|
|
46
|
+
enum: SEEK_END
|
|
47
|
+
int fseek (FILE *stream, long int offset, int whence)
|
|
48
|
+
void rewind (FILE *stream)
|
|
49
|
+
long int ftell (FILE *stream)
|
|
50
|
+
|
|
51
|
+
ctypedef struct fpos_t
|
|
52
|
+
ctypedef const fpos_t const_fpos_t "const fpos_t"
|
|
53
|
+
int fgetpos (FILE *stream, fpos_t *position)
|
|
54
|
+
int fsetpos (FILE *stream, const fpos_t *position)
|
|
55
|
+
|
|
56
|
+
int scanf (const char *template, ...)
|
|
57
|
+
int sscanf (const char *s, const char *template, ...)
|
|
58
|
+
int fscanf (FILE *stream, const char *template, ...)
|
|
59
|
+
|
|
60
|
+
int printf (const char *template, ...)
|
|
61
|
+
int sprintf (char *s, const char *template, ...)
|
|
62
|
+
int snprintf (char *s, size_t size, const char *template, ...)
|
|
63
|
+
int fprintf (FILE *stream, const char *template, ...)
|
|
64
|
+
|
|
65
|
+
void perror (const char *message)
|
|
66
|
+
|
|
67
|
+
char *gets (char *s)
|
|
68
|
+
char *fgets (char *s, int count, FILE *stream)
|
|
69
|
+
int getchar ()
|
|
70
|
+
int fgetc (FILE *stream)
|
|
71
|
+
int getc (FILE *stream)
|
|
72
|
+
int ungetc (int c, FILE *stream)
|
|
73
|
+
|
|
74
|
+
int puts (const char *s)
|
|
75
|
+
int fputs (const char *s, FILE *stream)
|
|
76
|
+
int putchar (int c)
|
|
77
|
+
int fputc (int c, FILE *stream)
|
|
78
|
+
int putc (int c, FILE *stream)
|
|
79
|
+
|
|
80
|
+
size_t getline(char **lineptr, size_t *n, FILE *stream)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 7.20 General utilities <stdlib.h>
|
|
2
|
+
|
|
3
|
+
# deprecated cimports for backwards compatibility:
|
|
4
|
+
from libc.string cimport const_char, const_void
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
cdef extern from "<stdlib.h>" nogil:
|
|
8
|
+
|
|
9
|
+
# 7.20.1 Numeric conversion functions
|
|
10
|
+
int atoi (const char *string)
|
|
11
|
+
long atol (const char *string)
|
|
12
|
+
long long atoll (const char *string)
|
|
13
|
+
double atof (const char *string)
|
|
14
|
+
long strtol (const char *string, char **tailptr, int base)
|
|
15
|
+
unsigned long int strtoul (const char *string, char **tailptr, int base)
|
|
16
|
+
long long int strtoll (const char *string, char **tailptr, int base)
|
|
17
|
+
unsigned long long int strtoull (const char *string, char **tailptr, int base)
|
|
18
|
+
float strtof (const char *string, char **tailptr)
|
|
19
|
+
double strtod (const char *string, char **tailptr)
|
|
20
|
+
long double strtold (const char *string, char **tailptr)
|
|
21
|
+
|
|
22
|
+
# 7.20.2 Pseudo-random sequence generation functions
|
|
23
|
+
enum: RAND_MAX
|
|
24
|
+
int rand ()
|
|
25
|
+
void srand (unsigned int seed)
|
|
26
|
+
|
|
27
|
+
# 7.20.3 Memory management functions
|
|
28
|
+
void *calloc (size_t count, size_t eltsize)
|
|
29
|
+
void free (void *ptr)
|
|
30
|
+
void *malloc (size_t size)
|
|
31
|
+
void *realloc (void *ptr, size_t newsize)
|
|
32
|
+
|
|
33
|
+
# 7.20.4 Communication with the environment
|
|
34
|
+
enum: EXIT_FAILURE
|
|
35
|
+
enum: EXIT_SUCCESS
|
|
36
|
+
void exit (int status)
|
|
37
|
+
void _exit (int status)
|
|
38
|
+
int atexit (void (*function) ())
|
|
39
|
+
void abort ()
|
|
40
|
+
char *getenv (const char *name)
|
|
41
|
+
int system (const char *command)
|
|
42
|
+
|
|
43
|
+
#7.20.5 Searching and sorting utilities
|
|
44
|
+
void *bsearch (const void *key, const void *array,
|
|
45
|
+
size_t count, size_t size,
|
|
46
|
+
int (*compare)(const void *, const void *))
|
|
47
|
+
void qsort (void *array, size_t count, size_t size,
|
|
48
|
+
int (*compare)(const void *, const void *))
|
|
49
|
+
|
|
50
|
+
# 7.20.6 Integer arithmetic functions
|
|
51
|
+
int abs (int number)
|
|
52
|
+
long int labs (long int number)
|
|
53
|
+
long long int llabs (long long int number)
|
|
54
|
+
ctypedef struct div_t:
|
|
55
|
+
int quot
|
|
56
|
+
int rem
|
|
57
|
+
div_t div (int numerator, int denominator)
|
|
58
|
+
ctypedef struct ldiv_t:
|
|
59
|
+
long int quot
|
|
60
|
+
long int rem
|
|
61
|
+
ldiv_t ldiv (long int numerator, long int denominator)
|
|
62
|
+
ctypedef struct lldiv_t:
|
|
63
|
+
long long int quot
|
|
64
|
+
long long int rem
|
|
65
|
+
lldiv_t lldiv (long long int numerator, long long int denominator)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# 7.20.7 Multibyte/wide character conversion functions
|
|
69
|
+
# XXX TODO
|
|
70
|
+
|
|
71
|
+
# 7.20.8 Multibyte/wide string conversion functions
|
|
72
|
+
# XXX TODO
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# 7.21 String handling <string.h>
|
|
2
|
+
|
|
3
|
+
cdef extern from *:
|
|
4
|
+
# deprecated backwards compatibility declarations
|
|
5
|
+
ctypedef const char const_char "const char"
|
|
6
|
+
ctypedef const signed char const_schar "const signed char"
|
|
7
|
+
ctypedef const unsigned char const_uchar "const unsigned char"
|
|
8
|
+
ctypedef const void const_void "const void"
|
|
9
|
+
|
|
10
|
+
cdef extern from "<string.h>" nogil:
|
|
11
|
+
|
|
12
|
+
void *memcpy (void *pto, const void *pfrom, size_t size)
|
|
13
|
+
void *memmove (void *pto, const void *pfrom, size_t size)
|
|
14
|
+
void *memset (void *block, int c, size_t size)
|
|
15
|
+
int memcmp (const void *a1, const void *a2, size_t size)
|
|
16
|
+
void *memchr (const void *block, int c, size_t size)
|
|
17
|
+
|
|
18
|
+
void *memchr (const void *block, int c, size_t size)
|
|
19
|
+
void *memrchr (const void *block, int c, size_t size)
|
|
20
|
+
|
|
21
|
+
size_t strlen (const char *s)
|
|
22
|
+
char *strcpy (char *pto, const char *pfrom)
|
|
23
|
+
char *strncpy (char *pto, const char *pfrom, size_t size)
|
|
24
|
+
char *strdup (const char *s)
|
|
25
|
+
char *strndup (const char *s, size_t size)
|
|
26
|
+
char *strcat (char *pto, const char *pfrom)
|
|
27
|
+
char *strncat (char *pto, const char *pfrom, size_t size)
|
|
28
|
+
|
|
29
|
+
int strcmp (const char *s1, const char *s2)
|
|
30
|
+
int strcasecmp (const char *s1, const char *s2)
|
|
31
|
+
int strncmp (const char *s1, const char *s2, size_t size)
|
|
32
|
+
int strncasecmp (const char *s1, const char *s2, size_t n)
|
|
33
|
+
|
|
34
|
+
int strcoll (const char *s1, const char *s2)
|
|
35
|
+
size_t strxfrm (char *pto, const char *pfrom, size_t size)
|
|
36
|
+
|
|
37
|
+
char *strerror (int errnum)
|
|
38
|
+
|
|
39
|
+
char *strchr (const char *string, int c)
|
|
40
|
+
char *strrchr (const char *string, int c)
|
|
41
|
+
|
|
42
|
+
char *strstr (const char *haystack, const char *needle)
|
|
43
|
+
char *strcasestr (const char *haystack, const char *needle)
|
|
44
|
+
|
|
45
|
+
size_t strcspn (const char *string, const char *stopset)
|
|
46
|
+
size_t strspn (const char *string, const char *set)
|
|
47
|
+
char * strpbrk (const char *string, const char *stopset)
|
|
48
|
+
|
|
49
|
+
char *strtok (char *newstring, const char *delimiters)
|
|
50
|
+
char *strsep (char **string_ptr, const char *delimiter)
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# cython: preliminary_late_includes_cy28=True
|
|
2
|
+
|
|
3
|
+
from libc.time cimport timespec
|
|
4
|
+
|
|
5
|
+
cdef extern from *:
|
|
6
|
+
"""
|
|
7
|
+
#include <string.h>
|
|
8
|
+
#include <threads.h>
|
|
9
|
+
static void __Pyx_once_flag_init(once_flag* flag) {
|
|
10
|
+
once_flag other = ONCE_FLAG_INIT;
|
|
11
|
+
memcpy(flag, &other, sizeof(once_flag));
|
|
12
|
+
}
|
|
13
|
+
"""
|
|
14
|
+
void once_flag_init "__Pyx_once_flag_init"(once_flag*)
|
|
15
|
+
|
|
16
|
+
cdef extern from "<threads.h>" nogil:
|
|
17
|
+
ctypedef void (*_once_func_type)() noexcept nogil
|
|
18
|
+
|
|
19
|
+
# Threads
|
|
20
|
+
ctypedef struct thrd_t:
|
|
21
|
+
pass
|
|
22
|
+
# Declare as noexcept because you'll regret trying to throw a Python exception from it
|
|
23
|
+
# and nogil because it's a new thread, so you definitely don't have a Python threadstate yet.
|
|
24
|
+
ctypedef int (*thrd_start_t)(void*) noexcept nogil
|
|
25
|
+
|
|
26
|
+
int thrd_create(thrd_t*, thrd_start_t, void*)
|
|
27
|
+
int thrd_equal(thrd_t lhs, thrd_t rhs)
|
|
28
|
+
thrd_t thrd_current()
|
|
29
|
+
int thrd_sleep(const timespec* duration, timespec* remaining)
|
|
30
|
+
void thrd_yield()
|
|
31
|
+
void thrd_exit(int res)
|
|
32
|
+
void thrd_detach(thrd_t thr)
|
|
33
|
+
# Be very wary of deadlocks if calling thrd_join with the GIL.
|
|
34
|
+
int thrd_join(thrd_t, int *res)
|
|
35
|
+
enum:
|
|
36
|
+
thrd_success
|
|
37
|
+
thrd_nomem
|
|
38
|
+
thrd_timedout
|
|
39
|
+
thrd_busy
|
|
40
|
+
thrd_error
|
|
41
|
+
|
|
42
|
+
# Mutexes.
|
|
43
|
+
# We strongly recommend not calling mtx_lock with the GIL held and being
|
|
44
|
+
# very wary of calling mtx_timed_lock with the GIL (because it will block the GIL until the timeout).
|
|
45
|
+
ctypedef struct mtx_t:
|
|
46
|
+
pass
|
|
47
|
+
int mtx_init(mtx_t* mtx, int type)
|
|
48
|
+
int mtx_lock(mtx_t* mtx) # see py_safe_mutex_lock for GIL-safe version
|
|
49
|
+
int mtx_timed_lock(mtx_t* mtx, const timespec* timepoint)
|
|
50
|
+
int mtx_trylock(mtx_t* mtx)
|
|
51
|
+
int mtx_unlock(mtx_t* mtx)
|
|
52
|
+
void mtx_destroy(mtx_t* mtx)
|
|
53
|
+
enum:
|
|
54
|
+
mtx_plain
|
|
55
|
+
mtx_recursive
|
|
56
|
+
mtx_timed
|
|
57
|
+
|
|
58
|
+
# call once. Potentially this may be hard to use with Cython's code generation
|
|
59
|
+
# (depending on the exact definition of "ONCE_FLAG_INIT").
|
|
60
|
+
# Use the helper function "once_flag_init" to do it non-statically.
|
|
61
|
+
ctypedef struct once_flag:
|
|
62
|
+
pass
|
|
63
|
+
once_flag ONCE_FLAG_INIT
|
|
64
|
+
|
|
65
|
+
# We strongly recommend not calling this with the GIL held.
|
|
66
|
+
# We define some GIL-friendly wrappers for C++ call-once which you can use
|
|
67
|
+
# in these circumstances.
|
|
68
|
+
# py_safe_call_once in this file avoids blocking, but the function
|
|
69
|
+
# must still be nogil.
|
|
70
|
+
void call_once(once_flag* flag, _once_func_type func) noexcept
|
|
71
|
+
|
|
72
|
+
# condition variables
|
|
73
|
+
ctypedef struct cnd_t:
|
|
74
|
+
pass
|
|
75
|
+
int cnd_init(cnd_t*)
|
|
76
|
+
int cnd_signal(cnd_t*)
|
|
77
|
+
int cnd_broadcast(cnd_t*)
|
|
78
|
+
# Be very wary of calling wait/timedwait with the GIL held. Two py_safe_ versions exist.
|
|
79
|
+
int cnd_wait(cnd_t*, mtx_t*)
|
|
80
|
+
int cnd_timedwait(cnd_t*, mtx_t*, const timespec*)
|
|
81
|
+
void cnd_destroy(cnd_t*)
|
|
82
|
+
|
|
83
|
+
# Thread-local storage
|
|
84
|
+
ctypedef struct tss_t:
|
|
85
|
+
pass
|
|
86
|
+
enum:
|
|
87
|
+
TSS_DTOR_ITERATIONS
|
|
88
|
+
ctypedef void (*tss_dtor_t)(void*) noexcept nogil
|
|
89
|
+
int tss_create(tss_t* key, tss_dtor_t destructor)
|
|
90
|
+
void *tss_get(tss_t key)
|
|
91
|
+
int tss_set(tss_t key, void* val)
|
|
92
|
+
void tss_delete(tss_t key)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
cdef inline void _dummy_force_utility_code_inclusion() nogil:
|
|
96
|
+
with nogil:
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
cdef extern from *:
|
|
100
|
+
ctypedef struct py_safe_once_flag "once_flag":
|
|
101
|
+
pass
|
|
102
|
+
py_safe_once_flag PY_SAFE_ONCE_FLAG_INIT "ONCE_FLAG_INIT"
|
|
103
|
+
|
|
104
|
+
cdef extern from *:
|
|
105
|
+
"""
|
|
106
|
+
static PyGILState_STATE __pyx_libc_threads_limited_api_ensure_gil() {
|
|
107
|
+
#if CYTHON_COMPILING_IN_LIMITED_API
|
|
108
|
+
if ((__PYX_LIMITED_VERSION_HEX < 0x030d0000) && __Pyx_get_runtime_version() < 0x030d0000) {
|
|
109
|
+
return PyGILState_Ensure();
|
|
110
|
+
}
|
|
111
|
+
#endif
|
|
112
|
+
return PyGILState_LOCKED; // Unused
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030d0000
|
|
116
|
+
static void __pyx_libc_threads_limited_api_release_gil(PyGILState_STATE gil_state) {
|
|
117
|
+
if (__Pyx_get_runtime_version() < 0x030d0000)
|
|
118
|
+
PyGILState_Release(gil_state);
|
|
119
|
+
}
|
|
120
|
+
#else
|
|
121
|
+
#define __pyx_libc_threads_limited_api_release_gil(ignore) (void)ignore
|
|
122
|
+
#endif
|
|
123
|
+
|
|
124
|
+
static int __pyx_libc_threads_has_gil() {
|
|
125
|
+
#if CYTHON_COMPILING_IN_LIMITED_API
|
|
126
|
+
if ((__PYX_LIMITED_VERSION_HEX >= 0x030d0000) || __Pyx_get_runtime_version() >= 0x030d0000) {
|
|
127
|
+
// In 3.13+ we can temporarily give up the GIL to find out what the thread state was.
|
|
128
|
+
PyThreadState *ts = PyThreadState_Swap(NULL);
|
|
129
|
+
if (ts) {
|
|
130
|
+
PyThreadState_Swap(ts);
|
|
131
|
+
return 1;
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
/* There is no way to know if we have the GIL. Therefore the only
|
|
136
|
+
* thing we can safely do is make absolutely sure that we have it
|
|
137
|
+
* (in __pyx_libc_threads_limited_api_ensure_gil).
|
|
138
|
+
*/
|
|
139
|
+
return 1;
|
|
140
|
+
#elif PY_VERSION_HEX >= 0x030d0000
|
|
141
|
+
return PyThreadState_GetUnchecked() != NULL;
|
|
142
|
+
#elif PY_VERSION_HEX >= 0x030C0000
|
|
143
|
+
return _PyThreadState_UncheckedGet() != NULL;
|
|
144
|
+
#else
|
|
145
|
+
return PyGILState_Check();
|
|
146
|
+
#endif
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
static int __pyx_py_safe_mtx_lock_release_lock_reacquire(mtx_t* mutex) {
|
|
150
|
+
// Release the GIL, acquire the lock, then reacquire the GIL.
|
|
151
|
+
// This is safe provided the user never holds the GIL while trying
|
|
152
|
+
// to reacquire the lock (i.e. it's safe provided they always use
|
|
153
|
+
// the py-safe wrappers).
|
|
154
|
+
int result;
|
|
155
|
+
Py_BEGIN_ALLOW_THREADS
|
|
156
|
+
result = mtx_lock(mutex);
|
|
157
|
+
Py_END_ALLOW_THREADS
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
static int __pyx_py_safe_mtx_lock_impl(mtx_t* mutex) {
|
|
162
|
+
int lock_result = mtx_trylock(mutex);
|
|
163
|
+
if (lock_result == thrd_busy) {
|
|
164
|
+
return __pyx_py_safe_mtx_lock_release_lock_reacquire(mutex);
|
|
165
|
+
}
|
|
166
|
+
return lock_result;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
CYTHON_UNUSED static int __pyx_py_safe_mtx_lock(mtx_t* mutex) {
|
|
170
|
+
PyGILState_STATE gil_state = __pyx_libc_threads_limited_api_ensure_gil();
|
|
171
|
+
if (!__pyx_libc_threads_has_gil())
|
|
172
|
+
return mtx_lock(mutex); /* No GIL, no problem */
|
|
173
|
+
int result = __pyx_py_safe_mtx_lock_impl(mutex);
|
|
174
|
+
__pyx_libc_threads_limited_api_release_gil(gil_state);
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
CYTHON_UNUSED static int __pyx_py_safe_cnd_wait( cnd_t* cond, mtx_t* mutex) {
|
|
179
|
+
__Pyx_UnknownThreadState thread_state = __Pyx_SaveUnknownThread();
|
|
180
|
+
int result = cnd_wait(cond, mutex);
|
|
181
|
+
if (__Pyx_UnknownThreadStateMayHaveHadGil(thread_state)) {
|
|
182
|
+
int unlock_result, relock_result;
|
|
183
|
+
unlock_result = mtx_unlock(mutex);
|
|
184
|
+
__Pyx_RestoreUnknownThread(thread_state);
|
|
185
|
+
PyGILState_STATE gil_state = __pyx_libc_threads_limited_api_ensure_gil();
|
|
186
|
+
relock_result = __pyx_py_safe_mtx_lock_impl(mutex);
|
|
187
|
+
__pyx_libc_threads_limited_api_release_gil(gil_state);
|
|
188
|
+
return relock_result != thrd_success ? relock_result :
|
|
189
|
+
unlock_result != thrd_success ? unlock_result :
|
|
190
|
+
result;
|
|
191
|
+
} else {
|
|
192
|
+
__Pyx_RestoreUnknownThread(thread_state);
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
CYTHON_UNUSED static int __pyx_py_safe_cnd_timedwait(cnd_t* cond, mtx_t* mutex, const struct timespec* time_point) {
|
|
198
|
+
__Pyx_UnknownThreadState thread_state = __Pyx_SaveUnknownThread();
|
|
199
|
+
int result = cnd_timedwait(cond, mutex, time_point);
|
|
200
|
+
if (__Pyx_UnknownThreadStateMayHaveHadGil(thread_state)) {
|
|
201
|
+
int unlock_result, relock_result;
|
|
202
|
+
unlock_result = mtx_unlock(mutex);
|
|
203
|
+
__Pyx_RestoreUnknownThread(thread_state);
|
|
204
|
+
PyGILState_STATE gil_state = __pyx_libc_threads_limited_api_ensure_gil();
|
|
205
|
+
relock_result = __pyx_py_safe_mtx_lock_impl(mutex);
|
|
206
|
+
__pyx_libc_threads_limited_api_release_gil(gil_state);
|
|
207
|
+
return relock_result != thrd_success ? relock_result :
|
|
208
|
+
unlock_result != thrd_success ? unlock_result :
|
|
209
|
+
result;
|
|
210
|
+
} else {
|
|
211
|
+
__Pyx_RestoreUnknownThread(thread_state);
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
CYTHON_UNUSED static void __pyx_libc_threads_py_safe_call_once(once_flag* flag, void (*func)(void)) {
|
|
217
|
+
__Pyx_UnknownThreadState thread_state = __Pyx_SaveUnknownThread();
|
|
218
|
+
call_once(flag, func);
|
|
219
|
+
__Pyx_RestoreUnknownThread(thread_state);
|
|
220
|
+
}
|
|
221
|
+
"""
|
|
222
|
+
# Acquire the lock without deadlocking on the GIL.
|
|
223
|
+
# At the end, the GIL will be restored to its original state.
|
|
224
|
+
int py_safe_mtx_lock "__pyx_py_safe_mtx_lock"(mtx_t* mutex) nogil
|
|
225
|
+
|
|
226
|
+
# Wait on the condition variable without deadlocking on the GIL.
|
|
227
|
+
# At the end, the GIL will be restored to its original state.
|
|
228
|
+
int py_safe_cnd_wait "__pyx_py_safe_cnd_wait"(cnd_t*, mtx_t*) nogil
|
|
229
|
+
int py_safe_cnd_timedwait "__pyx_py_safe_cnd_timedwait"(cnd_t*, mtx_t*, const timespec*) nogil
|
|
230
|
+
|
|
231
|
+
# call_once making sure not to deadlock on the GIL.
|
|
232
|
+
# The callable must still be nogil though.
|
|
233
|
+
void py_safe_once_flag_init "__Pyx_once_flag_init"(py_safe_once_flag*)
|
|
234
|
+
int py_safe_call_once "__pyx_libc_threads_py_safe_call_once"(py_safe_once_flag* flag, _once_func_type func) nogil
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# https://en.wikipedia.org/wiki/C_date_and_time_functions
|
|
2
|
+
|
|
3
|
+
from libc.stddef cimport wchar_t
|
|
4
|
+
|
|
5
|
+
cdef extern from "<time.h>" nogil:
|
|
6
|
+
ctypedef long clock_t
|
|
7
|
+
ctypedef long time_t
|
|
8
|
+
struct timespec:
|
|
9
|
+
time_t tv_sec
|
|
10
|
+
long tv_nsec
|
|
11
|
+
enum: TIME_UTC
|
|
12
|
+
|
|
13
|
+
enum: CLOCKS_PER_SEC
|
|
14
|
+
clock_t clock() # CPU time
|
|
15
|
+
time_t time(time_t *) # wall clock time since Unix epoch
|
|
16
|
+
|
|
17
|
+
cdef struct tm:
|
|
18
|
+
int tm_sec
|
|
19
|
+
int tm_min
|
|
20
|
+
int tm_hour
|
|
21
|
+
int tm_mday
|
|
22
|
+
int tm_mon
|
|
23
|
+
int tm_year
|
|
24
|
+
int tm_wday
|
|
25
|
+
int tm_yday
|
|
26
|
+
int tm_isdst
|
|
27
|
+
# GNU specific extensions
|
|
28
|
+
#char *tm_zone
|
|
29
|
+
#long tm_gmtoff
|
|
30
|
+
|
|
31
|
+
int daylight # global state
|
|
32
|
+
long timezone
|
|
33
|
+
char *tzname[2]
|
|
34
|
+
void tzset()
|
|
35
|
+
|
|
36
|
+
char *asctime(const tm *)
|
|
37
|
+
char *asctime_r(const tm *, char *)
|
|
38
|
+
char *ctime(const time_t *)
|
|
39
|
+
char *ctime_r(const time_t *, char *)
|
|
40
|
+
double difftime(time_t, time_t)
|
|
41
|
+
tm *getdate(const char *)
|
|
42
|
+
tm *gmtime(const time_t *)
|
|
43
|
+
tm *gmtime_r(const time_t *, tm *)
|
|
44
|
+
tm *localtime(const time_t *)
|
|
45
|
+
tm *localtime_r(const time_t *, tm *)
|
|
46
|
+
time_t mktime(tm *)
|
|
47
|
+
size_t strftime(char *, size_t, const char *, const tm *)
|
|
48
|
+
size_t wcsftime(wchar_t *str, size_t cnt, const wchar_t *fmt, tm *time)
|
|
49
|
+
int timespec_get(timespec *spec, int base)
|
|
50
|
+
|
|
51
|
+
# POSIX not stdC
|
|
52
|
+
char *strptime(const char *, const char *, tm *)
|