{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Structure Collection" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from byteclasses import ByteOrder\n", "from byteclasses.print import byteclass_info, byteclass_inspect\n", "from byteclasses.types.collections import ByteclassCollection, member, structure\n", "from byteclasses.types.primitives.characters import UChar\n", "from byteclasses.types.primitives.floats import Float32\n", "from byteclasses.types.primitives.generics import BitField, Byte\n", "from byteclasses.types.primitives.integers import Int8, UInt8, UInt16, UInt32" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Basic Structure" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@structure\n", "class BasicStructure:\n", " \"\"\"A basic structure byteclass.\"\"\"\n", "\n", " var1: UInt8\n", " var2: UInt16" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bs = BasicStructure()\n", "bs.data = b\"\\x00\\x01\\x02\\x03\"\n", "byteclass_info(bs)\n", "byteclass_inspect(bs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Packed Basic Structure" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@structure(packed=True)\n", "class PackedStructure:\n", " \"\"\"A Packed structure byteclass.\"\"\"\n", "\n", " var1: UInt8\n", " var2: UInt16" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ps = PackedStructure()\n", "byteclass_info(ps)\n", "byteclass_inspect(ps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simple Structure" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@structure(byte_order=b\"!\")\n", "class SimpleStruct:\n", " a: UInt8\n", " b: UInt16\n", " c: UChar\n", " d: Float32\n", " e: UInt8\n", "\n", "\n", "ss1: ByteclassCollection = SimpleStruct()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "byteclass_info(ss1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "byteclass_inspect(ss1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Direct data access" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ss1.data = b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xcd\\xcc\\x8c?\\x00\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "byteclass_inspect(ss1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ss2 = SimpleStruct()\n", "ss2.a = 1\n", "ss2.b = 2\n", "ss2.c = \"c\"\n", "ss2.d = 4" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "byteclass_inspect(ss2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Member Assignment" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(ss1.a.endianness)\n", "ss1.a = 1\n", "ss1.b = 2\n", "ss1.c = \"c\"\n", "ss1.d = 4" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "byteclass_inspect(ss1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Index Assignment" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ss1[1] = 6\n", "ss1[2] = 7\n", "ss1[3] = 8" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "byteclass_inspect(ss1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nested Collections" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@structure\n", "class InnerStruct:\n", " var1: BitField\n", " var2: Byte" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@structure(byte_order=ByteOrder.NATIVE, packed=True)\n", "class OuterStruct:\n", " var3: Int8\n", " var4: UInt32\n", " var5: Float32\n", " var6: InnerStruct = member(factory=InnerStruct)\n", "\n", " def test(self):\n", " print(\"test\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nested_struct = OuterStruct()\n", "byteclass_info(nested_struct)\n", "byteclass_inspect(nested_struct)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Member Assignment" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nested_struct.var4 = 1\n", "byteclass_inspect(nested_struct)\n", "byteclass_inspect(nested_struct.var6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data Attribute Assignment" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nested_struct.data = b\"\\xfa\\xf9\\xf8\\xf7\\xf6\\xf5\\xf4\\xf3\\xf2\\xf1\\xf0\"\n", "byteclass_inspect(nested_struct)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Slice Assignment" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nested_struct[2:5] = b\"\\x08\"\n", "byteclass_inspect(nested_struct)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.14 ('.venv': poetry)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" }, "vscode": { "interpreter": { "hash": "557d07237cea0a23e1b53fe2d85e0da343a1f271fee6abb399e030b4f4b9db4a" } } }, "nbformat": 4, "nbformat_minor": 2 }