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.
@@ -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
  ]