int_setting.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (c) 2012-2014 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "int_setting.h"
  6. #include "string_utils.h"
  7. namespace crown
  8. {
  9. static IntSetting* g_int_settings_head = NULL;
  10. IntSetting::IntSetting(const char* name, const char* synopsis, int32_t value, int32_t min, int32_t max) :
  11. m_name(name),
  12. m_synopsis(synopsis),
  13. m_value(0),
  14. m_min(min),
  15. m_max(max),
  16. m_next(NULL)
  17. {
  18. *this = value;
  19. if (g_int_settings_head != NULL)
  20. {
  21. m_next = g_int_settings_head;
  22. }
  23. g_int_settings_head = this;
  24. }
  25. const char* IntSetting::name() const
  26. {
  27. return m_name;
  28. }
  29. const char* IntSetting::synopsis() const
  30. {
  31. return m_synopsis;
  32. }
  33. int32_t IntSetting::value() const
  34. {
  35. return m_value;
  36. }
  37. int32_t IntSetting::min() const
  38. {
  39. return m_min;
  40. }
  41. int32_t IntSetting::max() const
  42. {
  43. return m_max;
  44. }
  45. IntSetting::operator int()
  46. {
  47. return m_value;
  48. }
  49. IntSetting& IntSetting::operator=(const int32_t value)
  50. {
  51. if (value > m_max)
  52. {
  53. m_value = m_max;
  54. }
  55. else if (value < m_min)
  56. {
  57. m_value = m_min;
  58. }
  59. else
  60. {
  61. m_value = value;
  62. }
  63. return *this;
  64. }
  65. IntSetting* IntSetting::find_setting(const char* name)
  66. {
  67. IntSetting* head = g_int_settings_head;
  68. while (head != NULL)
  69. {
  70. if (strcmp(name, head->name()) == 0)
  71. {
  72. return head;
  73. }
  74. head = head->m_next;
  75. }
  76. return NULL;
  77. }
  78. } // namespace crown