{"id":20145869,"url":"https://github.com/usagi/vec-dimension-shift","last_synced_at":"2026-05-31T01:31:27.985Z","repository":{"id":57671561,"uuid":"288846424","full_name":"usagi/vec-dimension-shift","owner":"usagi","description":"This crate is an extension for `Vec\u003cT\u003e` that extends the dimension-shift features.","archived":false,"fork":false,"pushed_at":"2020-08-19T22:06:17.000Z","size":8,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-28T08:45:20.371Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/usagi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-19T22:00:09.000Z","updated_at":"2023-01-16T13:22:52.000Z","dependencies_parsed_at":"2022-09-26T20:31:59.121Z","dependency_job_id":null,"html_url":"https://github.com/usagi/vec-dimension-shift","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi%2Fvec-dimension-shift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi%2Fvec-dimension-shift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi%2Fvec-dimension-shift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi%2Fvec-dimension-shift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/usagi","download_url":"https://codeload.github.com/usagi/vec-dimension-shift/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241587845,"owners_count":19986628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T22:18:32.631Z","updated_at":"2026-05-31T01:31:27.952Z","avatar_url":"https://github.com/usagi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![github]](https://github.com/usagi/vec-dimension-shift)\u0026ensp;[![crates-io]](https://crates.io/crates/vec-dimension-shift)\u0026ensp;[![docs-rs]](https://docs.rs/vec-dimension-shift)\u003cbr\u003e\n[![Build Status](https://travis-ci.org/usagi/vec-dimension-shift.svg?branch=master)](https://travis-ci.org/usagi/vec-dimension-shift)\n\n[github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge\u0026labelColor=555555\u0026logo=github\n[crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge\u0026labelColor=555555\u0026logo=rust\n[docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge\u0026labelColor=555555\u0026logoColor=white\u0026logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K\n\n# Vec Dimension Shift\n\nThis crate is an extension for `Vec\u003cT\u003e` that extends the dimension-shift features.\n\nNote: vec-dimension-shift crate use an unsafe features in the internal details. As an alternative, [dimension_shift_buffer][] is available if you want a more flexible runtime dimension shifting or safe-only implementation.\n\n[dimension_shift_buffer]: https://crates.io/crates/dimension_shiftable_buffer\n\n## What's the \"dimension shift\"?\n\nIn basically,\n\n- `Vec\u003cf64\u003e` --( Dimension shift, to the 2-dimension! )--\u003e `Vec\u003c[f64;2]\u003e`\n  - Original datum type is `f64` ≈ `[f64;1]`, 2D-shifted datum type is `[f64;2]`.\n  - Original datum element type is `f64`, 2D-shifted datum element type is `f64`.\n  - All datum elements were preserved.\n- `Vec\u003c[f64;2]\u003e` --( Dimension shift, flatten! )--\u003e `Vec\u003cf64\u003e`\n  - Of course, it's same too.\n\n## Implemented features\n\n1. `VecDimensionShift2D`, `VecDimensionShift2DFlatten` and the 2..16-dimension `trait`s for `Vec\u003cT\u003e`.\n2. `make_vec_dimension_shift_n_dimension!` macro for make your desired N-dimension `trait`s.\n\nNote: In the default, 2D, 3D, 4D version of `VecDimensionShift?D` is enabled. Set `default-features=false` if you don't need these.\n\n## Example\n\n```toml\n[dependencies]\nvec-dimension-shift = \"*\"\n```\n\n### Example-1\n\n1D -\u003e 2D -\u003e 1D -\u003e 3D -\u003e 1D, and modify an element:\n\n```rust\nuse vec_dimension_shift::{\n VecDimensionShift2D,\n VecDimensionShift2DFlatten,\n VecDimensionShift3D,\n VecDimensionShift3DFlatten\n};\n\nfn d2_and_d3()\n{\n let original = vec![0.0, 1.1, 2.2, 3.3, 4.4, 5.5];\n dbg!(\u0026original);\n\n let mut d2_shifted = original.as_2d_array().unwrap();\n dbg!(\u0026d2_shifted);\n assert_eq!(d2_shifted[0], [0.0, 1.1]);\n assert_eq!(d2_shifted[1], [2.2, 3.3]);\n assert_eq!(d2_shifted[2], [4.4, 5.5]);\n d2_shifted[1][1] = -1.0;\n\n let flatten = d2_shifted.as_flatten();\n dbg!(\u0026flatten);\n\n let mut d3_shifted = flatten.as_3d_array().unwrap();\n dbg!(\u0026d3_shifted);\n assert_eq!(d3_shifted[0], [0.0, 1.1, 2.2]);\n assert_eq!(d3_shifted[1], [-1.0, 4.4, 5.5]);\n d3_shifted[1][1] = -2.0;\n\n let flatten = d3_shifted.as_flatten();\n dbg!(\u0026flatten);\n\n assert_eq!(flatten, vec![0.0, 1.1, 2.2, -1.0, -2.0, 5.5])\n}\n```\n\n### Example-2\n\n1. Make `trait`s just you needs (eg, 2D and 3D)\n2. -\u003e Make 1D * 12-length buffer\n3. -\u003e Shift the dimension to 2D * 6-length buffer\n4. -\u003e Shift the dimension to ( 2D * 3D ) * 2-length buffer\n\n```rust\nuse vec_dimension_shift::make_vec_dimension_shift_n_dimension;\n\nfn n_dimension_macro_generator()\n{\n make_vec_dimension_shift_n_dimension! { VecDimensionShift2D, VecDimensionShift2DFlatten, as_2d_array_no_check, to_2d_array_no_check, as_2d_array, to_2d_array, as_2d_array_truncate, to_2d_array_truncate, as_2d_array_padding, to_2d_array_padding, 2 }\n make_vec_dimension_shift_n_dimension! { VecDimensionShift3D, VecDimensionShift3DFlatten, as_3d_array_no_check, to_3d_array_no_check, as_3d_array, to_3d_array, as_3d_array_truncate, to_3d_array_truncate, as_3d_array_padding, to_3d_array_padding, 3 }\n\n let original = vec![0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10, 11.11];\n dbg!(\u0026original);\n\n let d2 = original.as_2d_array().unwrap();\n assert_eq!(d2[0], [0.0, 1.1]);\n assert_eq!(d2[1], [2.2, 3.3]);\n assert_eq!(d2[2], [4.4, 5.5]);\n assert_eq!(d2[3], [6.6, 7.7]);\n assert_eq!(d2[4], [8.8, 9.9]);\n assert_eq!(d2[5], [10.10, 11.11]);\n dbg!(\u0026d2);\n\n let d3 = d2.as_3d_array().unwrap();\n assert_eq!(d3[0], [[0.0, 1.1], [2.2, 3.3], [4.4, 5.5]]);\n assert_eq!(d3[1], [[6.6, 7.7], [8.8, 9.9], [10.10, 11.11]]);\n dbg!(\u0026d3);\n}\n```\n\n## License\n\n- [MIT](LICENSE.md)\n\n## Author\n\n- [USAGI.NETWORK / Usagi Ito](https://github.com/usagi/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusagi%2Fvec-dimension-shift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusagi%2Fvec-dimension-shift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusagi%2Fvec-dimension-shift/lists"}