storage.tin 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. ///=== {
  8. ///// storage 模块实现了一个通用的本地存储引擎。
  9. ///// 可以用来存储和载入变量,这允许其它模块可以持久化自己的数据。
  10. ///// 变量会被存储在本地文件系统当中,称之为「存储文件」。
  11. /////
  12. ///// 存储文件按规定会统一存放在 data 目录下,支持文件重定位。也就是说,
  13. ///// 对于存储文件 file1 来说,其可能的物理存放位置为:
  14. ///// 1. var/data/file1.tin (优先)
  15. ///// 2. data/file1.tin (其次)
  16. /////
  17. ///// 各模块可以通过 API storage.Save 按需创建自己的存储文件,在其中存储一个或多个
  18. ///// 变量,并在需要时通过 API storage.Load 提取这些变量。
  19. ///// };
  20. #var lib_storage[META] {
  21. {NAME} {通用存储引擎}
  22. {DESC} {可以存储和载入变量,这允许其它模块可以持久化自己的数据}
  23. {AUTHOR} {担子炮}
  24. };
  25. #func {lib_storage.Init} {
  26. #local _ {@mkdir{data}};
  27. storage.Load {storage} {storage-globals};
  28. #return {true};
  29. };
  30. ///=== {
  31. // ## storage.Save <文件名> <变量名1> [...]
  32. // 将由变量名列表所指定的变量及其值存储到指定的存储文件中。
  33. // };
  34. #alias {storage.Save} {
  35. #local file {%1};
  36. #local vars {%2};
  37. #if { "$file" == "" || "$vars" == "" } {
  38. xtt.Usage storage.Save;
  39. #return;
  40. };
  41. #class comm-store-tmp open;
  42. #local var {};
  43. #foreach {$vars} {var} {
  44. #var {dump-$var} {${$var}};
  45. };
  46. #class comm-store-tmp close;
  47. #local files {};
  48. #line quiet #scan dir {var/data/} files;
  49. #if { &files[] > 0 } {
  50. #class comm-store-tmp write {var/data/${file}.tin};
  51. };
  52. #else {
  53. #class comm-store-tmp write {data/${file}.tin};
  54. };
  55. };
  56. ///=== {
  57. // ## storage.Load <文件名> <变量名1> [...]
  58. // 从指定的存储文件中加载变量。
  59. // 存储文件中实际存储的变量可能更多一些,但本函数可以只加载其中一部分变量。
  60. // };
  61. #alias {storage.Load} {
  62. #local file {%1};
  63. #local vars {%2};
  64. #if { "$file" == "" || "$vars" == "" } {
  65. xtt.Usage storage.Load;
  66. #return;
  67. };
  68. #line quiet #class comm-store-tmp {assign} {load-file data/${file}.tin};
  69. #local var {};
  70. #foreach {$vars} {var} {
  71. #var {$var} {${dump-$var}};
  72. };
  73. #class comm-store-tmp kill;
  74. };