make.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* make.h - Node-making functions
  2. * Copyright (C) 2017 caryoscelus
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #ifndef CORE_NODE_MAKE_H_C211DBC5_E4F0_54CF_BD3E_EFA07946E7B1
  18. #define CORE_NODE_MAKE_H_C211DBC5_E4F0_54CF_BD3E_EFA07946E7B1
  19. #include <core/std/memory.h>
  20. #include "value.h"
  21. namespace rainynite::core {
  22. /**
  23. * Make value node.
  24. *
  25. * Optional arguments are passed to T ctor.
  26. */
  27. template <typename T, typename... Args>
  28. shared_ptr<Value<T>> make_value(Args&&... args) {
  29. auto r = make_shared<Value<T>>();
  30. r->new_id();
  31. r->emplace(std::forward<Args>(args)...);
  32. return r;
  33. }
  34. /**
  35. * Make node of given type and init it's id.
  36. *
  37. * This should either be used or thrown out.
  38. */
  39. template <class T>
  40. shared_ptr<T> make_node() {
  41. auto r = make_shared<T>();
  42. r->new_id();
  43. return r;
  44. }
  45. } // namespace rainynite::core
  46. #endif