IncludeCPP 3.6.0__py3-none-any.whl → 3.7.9__py3-none-any.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.
- includecpp/__init__.py +1 -1
- includecpp/cli/commands.py +590 -11
- includecpp/core/cssl/CSSL_DOCUMENTATION.md +301 -20
- includecpp/core/cssl/cssl_builtins.py +114 -0
- includecpp/core/cssl/cssl_builtins.pyi +1393 -0
- includecpp/core/cssl/cssl_parser.py +348 -70
- includecpp/core/cssl/cssl_runtime.py +456 -16
- includecpp/core/cssl/cssl_types.py +224 -2
- includecpp/core/cssl_bridge.py +477 -48
- includecpp/vscode/cssl/language-configuration.json +1 -4
- includecpp/vscode/cssl/package.json +24 -4
- includecpp/vscode/cssl/snippets/cssl.snippets.json +1080 -0
- includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json +298 -17
- {includecpp-3.6.0.dist-info → includecpp-3.7.9.dist-info}/METADATA +1 -1
- {includecpp-3.6.0.dist-info → includecpp-3.7.9.dist-info}/RECORD +19 -17
- {includecpp-3.6.0.dist-info → includecpp-3.7.9.dist-info}/WHEEL +0 -0
- {includecpp-3.6.0.dist-info → includecpp-3.7.9.dist-info}/entry_points.txt +0 -0
- {includecpp-3.6.0.dist-info → includecpp-3.7.9.dist-info}/licenses/LICENSE +0 -0
- {includecpp-3.6.0.dist-info → includecpp-3.7.9.dist-info}/top_level.txt +0 -0
|
@@ -1281,10 +1281,232 @@ def create_dictionary(key_type: str = 'dynamic', value_type: str = 'dynamic') ->
|
|
|
1281
1281
|
return Dictionary(key_type, value_type)
|
|
1282
1282
|
|
|
1283
1283
|
|
|
1284
|
+
class Map(dict):
|
|
1285
|
+
"""C++ style map container with ordered key-value pairs.
|
|
1286
|
+
|
|
1287
|
+
Similar to Dictionary but with C++ map semantics.
|
|
1288
|
+
Keys are maintained in sorted order.
|
|
1289
|
+
|
|
1290
|
+
Usage:
|
|
1291
|
+
map<string, int> ages;
|
|
1292
|
+
ages.insert("Alice", 30);
|
|
1293
|
+
ages.find("Alice");
|
|
1294
|
+
ages.erase("Alice");
|
|
1295
|
+
"""
|
|
1296
|
+
|
|
1297
|
+
def __init__(self, key_type: str = 'dynamic', value_type: str = 'dynamic'):
|
|
1298
|
+
super().__init__()
|
|
1299
|
+
self._key_type = key_type
|
|
1300
|
+
self._value_type = value_type
|
|
1301
|
+
|
|
1302
|
+
def insert(self, key: Any, value: Any) -> 'Map':
|
|
1303
|
+
"""Insert key-value pair (C++ style)"""
|
|
1304
|
+
self[key] = value
|
|
1305
|
+
return self
|
|
1306
|
+
|
|
1307
|
+
def find(self, key: Any) -> Optional[Any]:
|
|
1308
|
+
"""Find value by key, returns None if not found (C++ style)"""
|
|
1309
|
+
return self.get(key, None)
|
|
1310
|
+
|
|
1311
|
+
def erase(self, key: Any) -> bool:
|
|
1312
|
+
"""Erase key-value pair, returns True if existed"""
|
|
1313
|
+
if key in self:
|
|
1314
|
+
del self[key]
|
|
1315
|
+
return True
|
|
1316
|
+
return False
|
|
1317
|
+
|
|
1318
|
+
def contains(self, key: Any) -> bool:
|
|
1319
|
+
"""Check if key exists (C++20 style)"""
|
|
1320
|
+
return key in self
|
|
1321
|
+
|
|
1322
|
+
def count(self, key: Any) -> int:
|
|
1323
|
+
"""Return 1 if key exists, 0 otherwise (C++ style)"""
|
|
1324
|
+
return 1 if key in self else 0
|
|
1325
|
+
|
|
1326
|
+
def size(self) -> int:
|
|
1327
|
+
"""Return map size"""
|
|
1328
|
+
return len(self)
|
|
1329
|
+
|
|
1330
|
+
def empty(self) -> bool:
|
|
1331
|
+
"""Check if map is empty"""
|
|
1332
|
+
return len(self) == 0
|
|
1333
|
+
|
|
1334
|
+
def at(self, key: Any) -> Any:
|
|
1335
|
+
"""Get value at key, raises error if not found (C++ style)"""
|
|
1336
|
+
if key not in self:
|
|
1337
|
+
raise KeyError(f"Key '{key}' not found in map")
|
|
1338
|
+
return self[key]
|
|
1339
|
+
|
|
1340
|
+
def begin(self) -> Optional[tuple]:
|
|
1341
|
+
"""Return first key-value pair"""
|
|
1342
|
+
if len(self) == 0:
|
|
1343
|
+
return None
|
|
1344
|
+
first_key = next(iter(self))
|
|
1345
|
+
return (first_key, self[first_key])
|
|
1346
|
+
|
|
1347
|
+
def end(self) -> Optional[tuple]:
|
|
1348
|
+
"""Return last key-value pair"""
|
|
1349
|
+
if len(self) == 0:
|
|
1350
|
+
return None
|
|
1351
|
+
last_key = list(self.keys())[-1]
|
|
1352
|
+
return (last_key, self[last_key])
|
|
1353
|
+
|
|
1354
|
+
def lower_bound(self, key: Any) -> Optional[Any]:
|
|
1355
|
+
"""Find first key >= given key (for sorted keys)"""
|
|
1356
|
+
sorted_keys = sorted(self.keys())
|
|
1357
|
+
for k in sorted_keys:
|
|
1358
|
+
if k >= key:
|
|
1359
|
+
return k
|
|
1360
|
+
return None
|
|
1361
|
+
|
|
1362
|
+
def upper_bound(self, key: Any) -> Optional[Any]:
|
|
1363
|
+
"""Find first key > given key (for sorted keys)"""
|
|
1364
|
+
sorted_keys = sorted(self.keys())
|
|
1365
|
+
for k in sorted_keys:
|
|
1366
|
+
if k > key:
|
|
1367
|
+
return k
|
|
1368
|
+
return None
|
|
1369
|
+
|
|
1370
|
+
|
|
1371
|
+
def create_map(key_type: str = 'dynamic', value_type: str = 'dynamic') -> Map:
|
|
1372
|
+
"""Create a Map object"""
|
|
1373
|
+
return Map(key_type, value_type)
|
|
1374
|
+
|
|
1375
|
+
|
|
1376
|
+
class CSSLClass:
|
|
1377
|
+
"""Represents a CSSL class definition.
|
|
1378
|
+
|
|
1379
|
+
Stores class name, member variables, methods, and constructor.
|
|
1380
|
+
Used by the runtime to instantiate CSSLInstance objects.
|
|
1381
|
+
"""
|
|
1382
|
+
|
|
1383
|
+
def __init__(self, name: str, members: Dict[str, Any] = None,
|
|
1384
|
+
methods: Dict[str, Any] = None, constructor: Any = None):
|
|
1385
|
+
self.name = name
|
|
1386
|
+
self.members = members or {} # Default member values/types
|
|
1387
|
+
self.methods = methods or {} # Method AST nodes
|
|
1388
|
+
self.constructor = constructor # Constructor AST node
|
|
1389
|
+
|
|
1390
|
+
def __repr__(self):
|
|
1391
|
+
return f"<CSSLClass '{self.name}' with {len(self.methods)} methods>"
|
|
1392
|
+
|
|
1393
|
+
|
|
1394
|
+
class CSSLInstance:
|
|
1395
|
+
"""Represents an instance of a CSSL class.
|
|
1396
|
+
|
|
1397
|
+
Holds instance member values and provides access to class methods.
|
|
1398
|
+
Supports this-> member access pattern.
|
|
1399
|
+
"""
|
|
1400
|
+
|
|
1401
|
+
def __init__(self, class_def: CSSLClass):
|
|
1402
|
+
self._class = class_def
|
|
1403
|
+
self._members: Dict[str, Any] = {}
|
|
1404
|
+
# Initialize members with defaults from class definition
|
|
1405
|
+
for name, default in class_def.members.items():
|
|
1406
|
+
if isinstance(default, dict):
|
|
1407
|
+
# Type declaration with optional default
|
|
1408
|
+
member_type = default.get('type')
|
|
1409
|
+
member_default = default.get('default')
|
|
1410
|
+
|
|
1411
|
+
if member_default is not None:
|
|
1412
|
+
self._members[name] = member_default
|
|
1413
|
+
elif member_type:
|
|
1414
|
+
# Create instance of container types
|
|
1415
|
+
self._members[name] = self._create_default_for_type(member_type)
|
|
1416
|
+
else:
|
|
1417
|
+
self._members[name] = None
|
|
1418
|
+
else:
|
|
1419
|
+
self._members[name] = default
|
|
1420
|
+
|
|
1421
|
+
def _create_default_for_type(self, type_name: str) -> Any:
|
|
1422
|
+
"""Create a default value for a given type name."""
|
|
1423
|
+
# Container types
|
|
1424
|
+
if type_name == 'map':
|
|
1425
|
+
return Map()
|
|
1426
|
+
elif type_name in ('stack',):
|
|
1427
|
+
return Stack()
|
|
1428
|
+
elif type_name in ('vector',):
|
|
1429
|
+
return Vector()
|
|
1430
|
+
elif type_name in ('array',):
|
|
1431
|
+
return Array()
|
|
1432
|
+
elif type_name in ('list',):
|
|
1433
|
+
return List()
|
|
1434
|
+
elif type_name in ('dictionary', 'dict'):
|
|
1435
|
+
return Dictionary()
|
|
1436
|
+
elif type_name == 'datastruct':
|
|
1437
|
+
return DataStruct()
|
|
1438
|
+
elif type_name == 'dataspace':
|
|
1439
|
+
return DataSpace()
|
|
1440
|
+
elif type_name == 'shuffled':
|
|
1441
|
+
return Shuffled()
|
|
1442
|
+
elif type_name == 'iterator':
|
|
1443
|
+
return Iterator()
|
|
1444
|
+
elif type_name == 'combo':
|
|
1445
|
+
return Combo()
|
|
1446
|
+
# Primitive types
|
|
1447
|
+
elif type_name == 'int':
|
|
1448
|
+
return 0
|
|
1449
|
+
elif type_name == 'float':
|
|
1450
|
+
return 0.0
|
|
1451
|
+
elif type_name == 'string':
|
|
1452
|
+
return ""
|
|
1453
|
+
elif type_name == 'bool':
|
|
1454
|
+
return False
|
|
1455
|
+
elif type_name == 'json':
|
|
1456
|
+
return {}
|
|
1457
|
+
return None
|
|
1458
|
+
|
|
1459
|
+
def get_member(self, name: str) -> Any:
|
|
1460
|
+
"""Get member value by name"""
|
|
1461
|
+
if name in self._members:
|
|
1462
|
+
return self._members[name]
|
|
1463
|
+
raise AttributeError(f"'{self._class.name}' has no member '{name}'")
|
|
1464
|
+
|
|
1465
|
+
def set_member(self, name: str, value: Any) -> None:
|
|
1466
|
+
"""Set member value by name"""
|
|
1467
|
+
self._members[name] = value
|
|
1468
|
+
|
|
1469
|
+
def has_member(self, name: str) -> bool:
|
|
1470
|
+
"""Check if member exists"""
|
|
1471
|
+
return name in self._members
|
|
1472
|
+
|
|
1473
|
+
def get_method(self, name: str) -> Any:
|
|
1474
|
+
"""Get method AST node by name"""
|
|
1475
|
+
if name in self._class.methods:
|
|
1476
|
+
return self._class.methods[name]
|
|
1477
|
+
raise AttributeError(f"'{self._class.name}' has no method '{name}'")
|
|
1478
|
+
|
|
1479
|
+
def has_method(self, name: str) -> bool:
|
|
1480
|
+
"""Check if method exists"""
|
|
1481
|
+
return name in self._class.methods
|
|
1482
|
+
|
|
1483
|
+
def __getattr__(self, name: str) -> Any:
|
|
1484
|
+
"""Allow direct attribute access for members"""
|
|
1485
|
+
if name.startswith('_'):
|
|
1486
|
+
raise AttributeError(name)
|
|
1487
|
+
if name in self._members:
|
|
1488
|
+
return self._members[name]
|
|
1489
|
+
raise AttributeError(f"'{self._class.name}' has no member '{name}'")
|
|
1490
|
+
|
|
1491
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
|
1492
|
+
"""Allow direct attribute setting for members"""
|
|
1493
|
+
if name.startswith('_'):
|
|
1494
|
+
object.__setattr__(self, name, value)
|
|
1495
|
+
else:
|
|
1496
|
+
if hasattr(self, '_members'):
|
|
1497
|
+
self._members[name] = value
|
|
1498
|
+
else:
|
|
1499
|
+
object.__setattr__(self, name, value)
|
|
1500
|
+
|
|
1501
|
+
def __repr__(self):
|
|
1502
|
+
return f"<CSSLInstance of '{self._class.name}'>"
|
|
1503
|
+
|
|
1504
|
+
|
|
1284
1505
|
__all__ = [
|
|
1285
1506
|
'DataStruct', 'Shuffled', 'Iterator', 'Combo', 'DataSpace', 'OpenQuote',
|
|
1286
|
-
'OpenFind', 'Parameter', 'Stack', 'Vector', 'Array', 'List', 'Dictionary',
|
|
1507
|
+
'OpenFind', 'Parameter', 'Stack', 'Vector', 'Array', 'List', 'Dictionary', 'Map',
|
|
1508
|
+
'CSSLClass', 'CSSLInstance',
|
|
1287
1509
|
'create_datastruct', 'create_shuffled', 'create_iterator',
|
|
1288
1510
|
'create_combo', 'create_dataspace', 'create_openquote', 'create_parameter',
|
|
1289
|
-
'create_stack', 'create_vector', 'create_array', 'create_list', 'create_dictionary'
|
|
1511
|
+
'create_stack', 'create_vector', 'create_array', 'create_list', 'create_dictionary', 'create_map'
|
|
1290
1512
|
]
|