varlist.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "varlist.h"
  2. #include "object-value.h"
  3. #include "inter.h"
  4. #include "core-init.h"
  5. namespace aFuncore {
  6. VarList::VarList(VarList *varlist){
  7. std::unique_lock<std::mutex> mutex{lock};
  8. for (auto &t: varlist->varspace)
  9. this->varspace.push_back(t);
  10. }
  11. /**
  12. * 访问变量
  13. * @param name 变量名
  14. * @return
  15. */
  16. Var *VarList::findVar(const std::string &name){
  17. std::unique_lock<std::mutex> mutex{lock};
  18. Var *ret = nullptr;
  19. for (auto tmp = varspace.begin(), end = varspace.end(); tmp != end && ret == nullptr; tmp++) {
  20. mutex.unlock();
  21. ret = (*tmp)->findVar(name);
  22. mutex.lock();
  23. }
  24. return ret;
  25. }
  26. /**
  27. * 定义变量
  28. * 若定义出现redefine则退出报错
  29. * 若出现fail则跳到下一个变量空间尝试定义
  30. * @param name 变量名
  31. * @param data 变量(Object)
  32. * @return
  33. */
  34. bool VarList::defineVar(const std::string &name, Object *data){
  35. std::unique_lock<std::mutex> mutex{lock};
  36. VarSpace::VarOperationFlat ret = VarSpace::vof_fail;
  37. for (auto tmp = varspace.begin(), end = varspace.end(); tmp != end && ret == VarSpace::vof_fail; tmp++) {
  38. mutex.unlock();
  39. ret = (*tmp)->defineVar(name, data);
  40. mutex.lock();
  41. }
  42. return ret == VarSpace::vof_success;
  43. }
  44. /**
  45. * 定义变量
  46. * 若定义出现redefine则退出报错
  47. * 若出现fail则跳到下一个变量空间尝试定义
  48. * @param name 变量名
  49. * @param data 变量(Var)
  50. * @return
  51. */
  52. bool VarList::defineVar(const std::string &name, Var *data){
  53. std::unique_lock<std::mutex> mutex{lock};
  54. VarSpace::VarOperationFlat ret = VarSpace::vof_fail;
  55. for (auto tmp = varspace.begin(), end = varspace.end(); tmp != end && ret == VarSpace::vof_fail; tmp++) {
  56. mutex.unlock();
  57. ret = (*tmp)->defineVar(name, data);
  58. mutex.lock();
  59. }
  60. return ret == VarSpace::vof_success;
  61. }
  62. /**
  63. * 设置变量的值
  64. * 若not_var则跳到下一个变量空间
  65. * 若fail则结束
  66. * @param name 变量名
  67. * @param data 数据
  68. * @return
  69. */
  70. bool VarList::setVar(const std::string &name, Object *data){
  71. std::unique_lock<std::mutex> mutex{lock};
  72. VarSpace::VarOperationFlat ret = VarSpace::vof_not_var;
  73. for (auto tmp = varspace.begin(), end = varspace.end(); tmp != end && ret == VarSpace::vof_not_var; tmp++) {
  74. mutex.unlock();
  75. ret = (*tmp)->setVar(name, data);
  76. mutex.lock();
  77. }
  78. return ret == VarSpace::vof_success;
  79. }
  80. /**
  81. * 删除变量
  82. * 若not_var则跳到下一个变量空间
  83. * 若fail则结束
  84. * @param name
  85. * @return
  86. */
  87. bool VarList::delVar(const std::string &name){
  88. std::unique_lock<std::mutex> mutex{lock};
  89. VarSpace::VarOperationFlat ret = VarSpace::vof_not_var;
  90. for (auto tmp = varspace.begin(), end = varspace.end(); tmp != end && ret == VarSpace::vof_not_var; tmp++) {
  91. mutex.unlock();
  92. ret = (*tmp)->delVar(name);
  93. mutex.lock();
  94. }
  95. return ret == VarSpace::vof_success;
  96. }
  97. void VarList::connect(VarList *varlist){
  98. std::unique_lock<std::mutex> mutex{lock};
  99. for (auto &t: varlist->varspace) {
  100. mutex.unlock();
  101. this->varspace.push_back(t);
  102. mutex.lock();
  103. }
  104. }
  105. }