{ "info": { "author": "Vladimir Menshakov", "author_email": "vladimir.menshakov@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Mapped Memory Friendly Archive Format - MMArch\n\n## Goals\n\n* Provide extensible platform-independent file archive format (what an invention!)\n* Effective in-memory access, O(1) full-path file access, O(N) readdir (file lists are immediately available)\n* Memory mapped - Rely on OS caching instead of caching in userspace.\n* No dynamic memory allocation\n* All function compiled in native and foreign endianess mode, speeding up native access\n\n## Structure\n\n* c/ C-library\n* python/ python archiver\n* unpack/ simple unpacker, test tool for c library\n\n\n## File Format\n\nSome design considerations regarding format:\n* Use only 32/64 bit types for effective aligned access\n* No obscure arithmetics, all of offsets in header \u2014 absolute\n* Group all headers at first 4G, saving on inner offsets\n* Could be either LE or BE\n\n```\n\n1. File Header\n\nu32 \"MARC\" magic, \"CRAM\"\nu32 version, current == 1 (still experimental)\nu32 page size, normally 4096, but you can use any arbitrary number, alignment for file data\nu32 total header size. If you want to mmap header, use this number (aligned to page boundary)\nu64 total file size. Aligned to page size. Reader shall not read anything past this point.\n\n//all the following table offsets in header should be aligned (at least 4 bytes)\nu32 object record table offset\nu32 filename table offset\nu32 readdir table offset\n\n2. Object Record Table Header\nu32 record fields counter, R (could be viewed as version, every record here has R*4 bytes size)\nu32 record count, N. Total record counter. Size of this table is N * R + this header\nu32 directory count, DN, all IDs below DN is directories\n\nN *\n\n3. Object Record, each of size R * u32\nu64 file data offset (0 for directories)\nu64 file size (0 for directories)\nu32 full path offset (usually string pool below, must've been within header size)\nu32 full path length (strings ARE NOT zero terminated, you shall read exact name size bytes from name offset)\n\n[string pool]\n\n4. Filename table\nu32 hash function id. (0 - FNV1, 1 - FNV1A, 2 - PYTHON, 3 - R5A)\nu32 bucket count, B\n\nFilename table index:\n(B + 1) * u32\nu32 offset to bucket 0\nu32 offset to bucket 1\n\u2026\nu32 offset to the end of bucket B-1\n\nFilename table entry:\nu32 object id (see object record table, p.2)\n\n5. Readdir table\n(D + 1) * readdir table index follows\nu32 offset to object list for directory 0\nu32 offset to object list for directory 1\n\u2026\nu32 offset to the end of for directory D - 1\n\nReaddir table entry\nu32 object id (see object record table, p.2)\nu32 local name offset (no path)\nu32 local name length\n\n[gap to align to page size]\n[file data referenced by offset/size in object table]\n[gap to align to page size]\n[file data referenced by offset/size in object table]\n[gap to align to page size]\n[file data referenced by offset/size in object table]\n\n\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/whoozle/mmarch", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "mmarch-pack", "package_url": "https://pypi.org/project/mmarch-pack/", "platform": "", "project_url": "https://pypi.org/project/mmarch-pack/", "project_urls": { "Homepage": "https://github.com/whoozle/mmarch" }, "release_url": "https://pypi.org/project/mmarch-pack/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Archiving utility for mmarch project, mmap-friendly archive", "version": "1.0.0" }, "last_serial": 4548883, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "7507bc2ab4c4fb06c2666433d946f3cc", "sha256": "f0a7537e747f1f533cd30147b25186ef9f9ebada561875c65742ed7111a663dd" }, "downloads": -1, "filename": "mmarch_pack-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7507bc2ab4c4fb06c2666433d946f3cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8057, "upload_time": "2018-11-30T22:41:01", "url": "https://files.pythonhosted.org/packages/ce/fd/bcea550c94686fac4193907d1ab681a3e50d4951747afb3459c69a7e7531/mmarch_pack-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1df0a38f890602f8c7cd6e04d56c34a", "sha256": "414ec5f153e5410cb950c842b78e0fc2c87a3ec94b382eb3b6e2c04b723b2820" }, "downloads": -1, "filename": "mmarch-pack-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b1df0a38f890602f8c7cd6e04d56c34a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6594, "upload_time": "2018-11-30T22:41:02", "url": "https://files.pythonhosted.org/packages/d6/0a/3f4bafa4eee3130f38f85a3907d04e7d6e0757b1717beecbef1cbb65c688/mmarch-pack-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7507bc2ab4c4fb06c2666433d946f3cc", "sha256": "f0a7537e747f1f533cd30147b25186ef9f9ebada561875c65742ed7111a663dd" }, "downloads": -1, "filename": "mmarch_pack-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7507bc2ab4c4fb06c2666433d946f3cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8057, "upload_time": "2018-11-30T22:41:01", "url": "https://files.pythonhosted.org/packages/ce/fd/bcea550c94686fac4193907d1ab681a3e50d4951747afb3459c69a7e7531/mmarch_pack-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1df0a38f890602f8c7cd6e04d56c34a", "sha256": "414ec5f153e5410cb950c842b78e0fc2c87a3ec94b382eb3b6e2c04b723b2820" }, "downloads": -1, "filename": "mmarch-pack-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b1df0a38f890602f8c7cd6e04d56c34a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6594, "upload_time": "2018-11-30T22:41:02", "url": "https://files.pythonhosted.org/packages/d6/0a/3f4bafa4eee3130f38f85a3907d04e7d6e0757b1717beecbef1cbb65c688/mmarch-pack-1.0.0.tar.gz" } ] }