基本稳定
This commit is contained in:
1 parent
02479420e8
commit
acc126ce0c
1868 files changed
+1386
-62775
No files matched your search
+2
-16
@@ -82,7 +82,8 @@ class ParsedArgs:
|
||||
"""Fetch string value. Returns None if key not found."""
|
||||
if self._ht.__contains__(name) == 0:
|
||||
return None
|
||||
return self._ht[name]
|
||||
r: str = self._ht[name]
|
||||
return r
|
||||
|
||||
def get_int(self, name: str) -> int:
|
||||
"""Fetch integer value. Returns 0 if key not found."""
|
||||
@@ -128,29 +129,22 @@ class ArgumentParser:
|
||||
|
||||
def __new__(self, prog: str = "", description: str = "",
|
||||
pool: memhub.MemBuddy | t.CPtr = None) -> t.CPtr:
|
||||
stdio.printf("[DBG-argparse] __new__ enter pool=%p\n", pool)
|
||||
mb: memhub.MemBuddy | t.CPtr = pool
|
||||
if mb is None:
|
||||
mb = _mbuddy
|
||||
stdio.printf("[DBG-argparse] __new__ mb=%p\n", mb)
|
||||
ret: t.CPtr = mb.alloc(40)
|
||||
stdio.printf("[DBG-argparse] __new__ ret=%p\n", ret)
|
||||
return ret
|
||||
|
||||
def __init__(self, prog: str = "", description: str = "",
|
||||
pool: memhub.MemBuddy | t.CPtr = None):
|
||||
stdio.printf("[DBG-argparse] __init__ enter self=%p pool=%p\n", self, pool)
|
||||
mb: memhub.MemBuddy | t.CPtr = pool
|
||||
if mb is None:
|
||||
mb = _mbuddy
|
||||
stdio.printf("[DBG-argparse] __init__ mb=%p\n", mb)
|
||||
self.__mbuddy__ = mb
|
||||
self._prog = prog
|
||||
self._description = description
|
||||
self._arg_count = 0
|
||||
stdio.printf("[DBG-argparse] __init__ before alloc\n")
|
||||
self._args = mb.alloc(MAX_ARGS * Argument.__sizeof__())
|
||||
stdio.printf("[DBG-argparse] __init__ after alloc _args=%p\n", self._args)
|
||||
|
||||
def add_argument(self, name: str = "", short: str = None,
|
||||
arg_type: int = 0, default: int = 0,
|
||||
@@ -168,15 +162,11 @@ class ArgumentParser:
|
||||
action: Action mode (STORE/STORE_TRUE/STORE_FALSE/COUNT)
|
||||
help: Help description text
|
||||
"""
|
||||
stdio.printf("[DBG-argparse] enter add_argument name=%s args_ptr=%p\n", name, self._args)
|
||||
if self._arg_count >= MAX_ARGS:
|
||||
return
|
||||
idx: int = self._arg_count
|
||||
stdio.printf("[DBG-argparse] idx=%d sizeof(Argument)=%d\n", idx, Argument.__sizeof__())
|
||||
arg: Argument | t.CPtr = t.CPtr(t.CUInt64T(self._args) + idx * Argument.__sizeof__())
|
||||
stdio.printf("[DBG-argparse] arg ptr=%p\n", arg)
|
||||
arg.name = name
|
||||
stdio.printf("[DBG-argparse] after arg.name=%s\n", arg.name)
|
||||
arg.short_name = short
|
||||
arg.help_text = help
|
||||
arg.arg_type = arg_type
|
||||
@@ -184,7 +174,6 @@ class ArgumentParser:
|
||||
arg.default_int = default
|
||||
arg.default_str = default_str
|
||||
arg.required = required
|
||||
stdio.printf("[DBG-argparse] before dest logic\n")
|
||||
# Determine positional flag
|
||||
if name is not None and name[0] != '-':
|
||||
arg.is_positional = True
|
||||
@@ -195,9 +184,7 @@ class ArgumentParser:
|
||||
arg.dest = name + 2
|
||||
else:
|
||||
arg.dest = name + 1
|
||||
stdio.printf("[DBG-argparse] after dest logic\n")
|
||||
self._arg_count = idx + 1
|
||||
stdio.printf("[DBG-argparse] exit add_argument\n")
|
||||
|
||||
def _get_arg(self, idx: int) -> Argument | t.CPtr:
|
||||
return t.CPtr(t.CUInt64T(self._args) + idx * Argument.__sizeof__())
|
||||
@@ -280,7 +267,6 @@ class ArgumentParser:
|
||||
args: ParsedArgs | t.CPtr = ParsedArgs(self.__mbuddy__)
|
||||
if args is None:
|
||||
return None
|
||||
|
||||
# Initialize default values
|
||||
i: int = 0
|
||||
while i < self._arg_count:
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import t, c
|
||||
import string
|
||||
import memhub
|
||||
import stdio
|
||||
from stdint import *
|
||||
|
||||
# Empty slot marker (hash == 0)
|
||||
@@ -173,7 +174,8 @@ class HashTable:
|
||||
sh: t.CUInt64T = self._slot_hash(idx)
|
||||
if sh == _HT_EMPTY or sh == _HT_TOMBSTONE:
|
||||
return None
|
||||
return self._slot_value(idx)
|
||||
v: t.CPtr = self._slot_value(idx)
|
||||
return v
|
||||
|
||||
def __contains__(self, key: str) -> t.CInt:
|
||||
"""Check whether key exists in table."""
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from stdint import *
|
||||
import t, c
|
||||
import stdio
|
||||
|
||||
|
||||
# String copy function
|
||||
@@ -46,6 +47,24 @@ def strncpy(dest: str, src: str, n: t.CSizeT) -> str:
|
||||
return original_dest
|
||||
|
||||
|
||||
# String concatenate function with limited length
|
||||
def strncat(dest: str, src: str, n: t.CSizeT) -> str:
|
||||
if dest == None or src == None or n == 0: return dest
|
||||
original_dest: str = dest
|
||||
# Find end of dest
|
||||
while dest[0] != '\0':
|
||||
dest += 1
|
||||
# Copy up to n chars from src
|
||||
i: t.CSizeT = 0
|
||||
for s in src:
|
||||
if i >= n: break
|
||||
dest[0] = s
|
||||
dest += 1
|
||||
i += 1
|
||||
dest[0] = 0
|
||||
return original_dest
|
||||
|
||||
|
||||
# String length function
|
||||
def strlen(src: str) -> t.CSizeT | t.CExport:
|
||||
length: t.CSizeT = 0
|
||||
|
||||
Reference in new issue
Block a user