A set of classes for parsing, evaluating, and formatting die roll strings.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

SA_DiceExpression.m 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. //
  2. // SA_DiceExpression.m
  3. // SA_IRCBotServer
  4. //
  5. // Created by Said Achmiz on 6/23/19.
  6. //
  7. //
  8. #import "SA_DiceExpression.h"
  9. /*********************/
  10. #pragma mark Functions
  11. /*********************/
  12. NSString *NSStringFromSA_DiceExpressionOperator(SA_DiceExpressionOperator operator) {
  13. static NSDictionary <NSNumber *, NSString *> *SA_DiceExpressionOperatorStringValues;
  14. static dispatch_once_t onceToken;
  15. dispatch_once(&onceToken, ^{
  16. SA_DiceExpressionOperatorStringValues = @{ @(SA_DiceExpressionOperator_NONE) : @"SA_DB_OPERATOR_NONE",
  17. @(SA_DiceExpressionOperator_MINUS) : @"SA_DB_OPERATOR_MINUS",
  18. @(SA_DiceExpressionOperator_PLUS) : @"SA_DB_OPERATOR_PLUS",
  19. @(SA_DiceExpressionOperator_TIMES) : @"SA_DB_OPERATOR_TIMES"
  20. };
  21. });
  22. return SA_DiceExpressionOperatorStringValues[@(operator)];
  23. }
  24. NSString *NSStringFromSA_DiceExpressionRollCommand(SA_DiceExpressionRollCommand command) {
  25. static NSDictionary <NSNumber *, NSString *> *SA_DiceExpressionRollCommandStringValues;
  26. static dispatch_once_t onceToken;
  27. dispatch_once(&onceToken, ^{
  28. SA_DiceExpressionRollCommandStringValues = @{ @(SA_DiceExpressionRollCommand_SUM) : @"SA_DB_ROLL_COMMAND_SUM",
  29. @(SA_DiceExpressionRollCommand_SUM_EXPLODING) : @"SA_DB_ROLL_COMMAND_SUM_EXPLODING"
  30. };
  31. });
  32. return SA_DiceExpressionRollCommandStringValues[@(command)];
  33. }
  34. NSString *NSStringFromSA_DiceExpressionRollModifier(SA_DiceExpressionRollModifier modifier) {
  35. static NSDictionary <NSNumber *, NSString *> *SA_DiceExpressionRollModifierStringValues;
  36. static dispatch_once_t onceToken;
  37. dispatch_once(&onceToken, ^{
  38. SA_DiceExpressionRollModifierStringValues = @{ @(SA_DiceExpressionRollModifier_KEEP_HIGHEST) : @"SA_DB_ROLL_MODIFIER_KEEP_HIGHEST",
  39. @(SA_DiceExpressionRollModifier_KEEP_LOWEST) : @"SA_DB_ROLL_MODIFIER_KEEP_LOWEST"
  40. };
  41. });
  42. return SA_DiceExpressionRollModifierStringValues[@(modifier)];
  43. }
  44. NSString *NSStringFromSA_DiceExpressionError(SA_DiceExpressionError error) {
  45. static NSDictionary <NSNumber *, NSString *> *SA_DiceExpressionErrorStringValues;
  46. static dispatch_once_t onceToken;
  47. dispatch_once(&onceToken, ^{
  48. SA_DiceExpressionErrorStringValues = @{ @(SA_DiceExpressionError_ROLL_STRING_EMPTY) : @"SA_DB_ERROR_ROLL_STRING_EMPTY",
  49. @(SA_DiceExpressionError_ROLL_STRING_HAS_ILLEGAL_CHARACTERS) : @"SA_DB_ERROR_ROLL_STRING_HAS_ILLEGAL_CHARACTERS",
  50. @(SA_DiceExpressionError_UNKNOWN_ROLL_COMMAND) : @"SA_DB_ERROR_UNKNOWN_ROLL_COMMAND",
  51. @(SA_DiceExpressionError_ROLL_MODIFIER_INAPPLICABLE) : @"SA_DB_ERROR_ROLL_MODIFIER_INAPPLICABLE",
  52. @(SA_DiceExpressionError_UNKNOWN_ROLL_MODIFIER) : @"SA_DB_ERROR_UNKNOWN_ROLL_MODIFIER",
  53. @(SA_DiceExpressionError_DIE_COUNT_NEGATIVE) : @"SA_DB_ERROR_DIE_COUNT_NEGATIVE",
  54. @(SA_DiceExpressionError_DIE_COUNT_EXCESSIVE) : @"SA_DB_ERROR_DIE_COUNT_EXCESSIVE",
  55. @(SA_DiceExpressionError_DIE_SIZE_INVALID) : @"SA_DB_ERROR_DIE_SIZE_INVALID",
  56. @(SA_DiceExpressionError_DIE_SIZE_EXCESSIVE) : @"SA_DB_ERROR_DIE_SIZE_EXCESSIVE",
  57. @(SA_DiceExpressionError_UNKNOWN_OPERATOR) : @"SA_DB_ERROR_UNKNOWN_OPERATOR",
  58. @(SA_DiceExpressionError_INVALID_EXPRESSION) : @"SA_DB_ERROR_INVALID_EXPRESSION",
  59. @(SA_DiceExpressionError_INTEGER_OVERFLOW_NEGATION) : @"SA_DB_ERROR_INTEGER_OVERFLOW_NEGATION",
  60. @(SA_DiceExpressionError_INTEGER_OVERFLOW_ADDITION) : @"SA_DB_ERROR_INTEGER_OVERFLOW_ADDITION",
  61. @(SA_DiceExpressionError_INTEGER_UNDERFLOW_ADDITION) : @"SA_DB_ERROR_INTEGER_UNDERFLOW_ADDITION",
  62. @(SA_DiceExpressionError_INTEGER_OVERFLOW_SUBTRACTION) : @"SA_DB_ERROR_INTEGER_OVERFLOW_SUBTRACTION",
  63. @(SA_DiceExpressionError_INTEGER_UNDERFLOW_SUBTRACTION) : @"SA_DB_ERROR_INTEGER_UNDERFLOW_SUBTRACTION",
  64. @(SA_DiceExpressionError_INTEGER_OVERFLOW_MULTIPLICATION) : @"SA_DB_ERROR_INTEGER_OVERFLOW_MULTIPLICATION",
  65. @(SA_DiceExpressionError_INTEGER_UNDERFLOW_MULTIPLICATION) : @"SA_DB_ERROR_INTEGER_UNDERFLOW_MULTIPLICATION",
  66. @(SA_DiceExpressionError_KEEP_COUNT_EXCEEDS_ROLL_COUNT) : @"SA_DB_ERROR_KEEP_COUNT_EXCEEDS_ROLL_COUNT",
  67. @(SA_DiceExpressionError_KEEP_COUNT_NEGATIVE) : @"SA_DB_ERROR_KEEP_COUNT_NEGATIVE"
  68. };
  69. });
  70. return SA_DiceExpressionErrorStringValues[@(error)];
  71. }
  72. NSComparisonResult compareEvaluatedExpressionsByResult(SA_DiceExpression *expression1,
  73. SA_DiceExpression *expression2) {
  74. if (expression1.result.integerValue < expression2.result.integerValue)
  75. return NSOrderedAscending;
  76. else if (expression1.result.integerValue > expression2.result.integerValue)
  77. return NSOrderedDescending;
  78. else
  79. return NSOrderedSame;
  80. }
  81. NSComparisonResult compareEvaluatedExpressionsByAttemptBonus(SA_DiceExpression *expression1,
  82. SA_DiceExpression *expression2) {
  83. if (expression1.rightOperand.result.integerValue < expression2.rightOperand.result.integerValue)
  84. return NSOrderedAscending;
  85. else if (expression1.rightOperand.result.integerValue > expression2.rightOperand.result.integerValue)
  86. return NSOrderedDescending;
  87. else
  88. return NSOrderedSame;
  89. }
  90. /****************************************************/
  91. #pragma mark - SA_DiceExpression class implementation
  92. /****************************************************/
  93. @implementation SA_DiceExpression
  94. /*******************************/
  95. #pragma mark - NSCopying methods
  96. /*******************************/
  97. -(instancetype) copyWithZone:(NSZone *)zone {
  98. SA_DiceExpression *copy = [SA_DiceExpression new];
  99. copy.type = _type;
  100. copy.errorBitMask = _errorBitMask;
  101. copy.operator = _operator;
  102. copy.leftOperand = [_leftOperand copy];
  103. copy.rightOperand = [_rightOperand copy];
  104. copy.rollCommand = _rollCommand;
  105. copy.dieCount = [_dieCount copy];
  106. copy.dieSize = [_dieSize copy];
  107. copy.dieType = _dieType;
  108. copy.rollModifier = _rollModifier;
  109. copy.value = _value;
  110. copy.inputString = _inputString;
  111. copy.attributedInputString = _attributedInputString;
  112. copy.result = _result;
  113. copy.rolls = _rolls;
  114. return copy;
  115. }
  116. @end