Efficient Tiny State Machine using object callbacks.
Project description
python etsm
Tiny state machine for python, see etsm
Description
Implement a bare bones state machine in many languages. This library aim to be simple as possible and support only basic features:
- states on object (owner)
- optional enter/exit methods
- virtual state user methods
- is in
- unrestricted transitions
- no runtime allocation
Install
include this file into your project etsm.py
or
import it
import etsm
Example
Simple
import etsm
class Foo:
def __init__(self):
self.__sm = etsm.StateMachine(self)
self.__a = etsm.State(Foo.EnterA, Foo.ExitA)
self.__b = etsm.State(Foo.EnterB, None)
def EnterA(self):
print(' ->A ', end='')
def ExitA(self):
print(' A-> ', end='')
def EnterB(self):
print(' ->B ', end='')
# no exit for B
# def ExitB(self):
# print(' B-> ', end='')
def Run(self):
self.__sm.Transition(self.__a);
self.__sm.Transition(self.__b);
self.__sm.Transition(None);
foo = Foo()
foo.Run()
Output : " ->A A-> ->B "
Sample: ab.py
Virtual State Methods
import etsm
class FooState(etsm.State):
def __init__(self, enter, exit, tick):
super().__init__(enter, exit)
self.Tick = tick
class Foo:
def __init__(self):
self.__sm = etsm.StateMachine(self)
self.__a = FooState(None, None, Foo.TickA)
self.__b = FooState(None, None, Foo.TickB)
def TickA(self):
print(' A ', end='')
def TickB(self):
print(' B ', end='')
# call tick on the current state, aka virtual call
def Tick(self):
if ( self.__sm.Current != None ):
self.__sm.Current.Tick(self)
def Run(self):
self.Tick();
self.__sm.Transition(self.__a);
self.Tick();
self.__sm.Transition(self.__b);
self.Tick();
self.__sm.Transition(None);
self.Tick();
foo = Foo()
foo.Run()
Output: " A B "
Sample: virtual_call.py
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file etsm-0.5.0.tar.gz.
File metadata
- Download URL: etsm-0.5.0.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65b18e606606bde12e00caf14cab01a2b00a8000f4bf95881d651e7692e858fc
|
|
| MD5 |
6d5e13445214636c9850d05444ecbc46
|
|
| BLAKE2b-256 |
e78d192df12bffb74f380bfb0de98322a64006692c84aafa1e914cbe70b0196a
|
File details
Details for the file etsm-0.5.0-py3-none-any.whl.
File metadata
- Download URL: etsm-0.5.0-py3-none-any.whl
- Upload date:
- Size: 3.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfa25e9017541e18d84420d06e69e40e5cfe13080f979213fb7523fdb15ccff6
|
|
| MD5 |
c9726c9d4bd59e8dde46a84384815dcb
|
|
| BLAKE2b-256 |
94d9357761707815bf71fdc3b658d1c30cac565bc48c484eb17a1c101aa2bc80
|