A set of classes for parsing, evaluating, and formatting die roll strings.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

SA_DiceExpression.h 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. // SA_DiceExpression.h
  3. // SA_IRCBotServer
  4. //
  5. // Created by Said Achmiz on 6/23/19.
  6. //
  7. //
  8. #import <Foundation/Foundation.h>
  9. /***********************/
  10. #pragma mark Definitions
  11. /***********************/
  12. typedef NS_ENUM(NSUInteger, SA_DiceExpressionTermType) {
  13. SA_DiceExpressionTerm_NONE,
  14. SA_DiceExpressionTerm_OPERATION,
  15. SA_DiceExpressionTerm_ROLL_COMMAND,
  16. SA_DiceExpressionTerm_ROLL_MODIFIER,
  17. SA_DiceExpressionTerm_VALUE
  18. };
  19. typedef NS_ENUM(NSUInteger, SA_DiceExpressionOperator) {
  20. SA_DiceExpressionOperator_NONE,
  21. SA_DiceExpressionOperator_MINUS,
  22. SA_DiceExpressionOperator_PLUS,
  23. SA_DiceExpressionOperator_TIMES
  24. };
  25. typedef NS_ENUM(NSUInteger, SA_DiceExpressionRollCommand) {
  26. SA_DiceExpressionRollCommand_NONE,
  27. SA_DiceExpressionRollCommand_SUM,
  28. SA_DiceExpressionRollCommand_SUM_EXPLODING
  29. };
  30. typedef NS_ENUM(NSUInteger, SA_DiceExpressionDieType) {
  31. SA_DiceExpressionDice_STANDARD,
  32. SA_DiceExpressionDice_FUDGE
  33. };
  34. typedef NS_ENUM(NSUInteger, SA_DiceExpressionRollModifier) {
  35. SA_DiceExpressionRollModifier_NONE,
  36. SA_DiceExpressionRollModifier_KEEP_HIGHEST,
  37. SA_DiceExpressionRollModifier_KEEP_LOWEST
  38. };
  39. typedef NS_OPTIONS(NSUInteger, SA_DiceExpressionError) {
  40. // Errors for expression parsing.
  41. SA_DiceExpressionError_NONE,
  42. SA_DiceExpressionError_ROLL_STRING_EMPTY = 1 << 0 ,
  43. SA_DiceExpressionError_ROLL_STRING_HAS_ILLEGAL_CHARACTERS = 1 << 1 ,
  44. // Errors for expression evaluation.
  45. SA_DiceExpressionError_UNKNOWN_ROLL_COMMAND = 1 << 2 ,
  46. SA_DiceExpressionError_ROLL_MODIFIER_INAPPLICABLE = 1 << 3 ,
  47. SA_DiceExpressionError_UNKNOWN_ROLL_MODIFIER = 1 << 4 ,
  48. SA_DiceExpressionError_DIE_COUNT_NEGATIVE = 1 << 5 ,
  49. SA_DiceExpressionError_DIE_COUNT_EXCESSIVE = 1 << 6 ,
  50. SA_DiceExpressionError_DIE_SIZE_INVALID = 1 << 7 ,
  51. SA_DiceExpressionError_DIE_SIZE_EXCESSIVE = 1 << 8 ,
  52. SA_DiceExpressionError_UNKNOWN_OPERATOR = 1 << 9 ,
  53. SA_DiceExpressionError_INVALID_EXPRESSION = 1 << 10 ,
  54. SA_DiceExpressionError_INTEGER_OVERFLOW_NEGATION = 1 << 11 ,
  55. SA_DiceExpressionError_INTEGER_OVERFLOW_ADDITION = 1 << 12 ,
  56. SA_DiceExpressionError_INTEGER_UNDERFLOW_ADDITION = 1 << 13 ,
  57. SA_DiceExpressionError_INTEGER_OVERFLOW_SUBTRACTION = 1 << 14 ,
  58. SA_DiceExpressionError_INTEGER_UNDERFLOW_SUBTRACTION = 1 << 15 ,
  59. SA_DiceExpressionError_INTEGER_OVERFLOW_MULTIPLICATION = 1 << 16 ,
  60. SA_DiceExpressionError_INTEGER_UNDERFLOW_MULTIPLICATION = 1 << 17 ,
  61. SA_DiceExpressionError_KEEP_COUNT_EXCEEDS_ROLL_COUNT = 1 << 18 ,
  62. SA_DiceExpressionError_KEEP_COUNT_NEGATIVE = 1 << 19
  63. };
  64. /***********************/
  65. #pragma mark - Functions
  66. /***********************/
  67. NSString *NSStringFromSA_DiceExpressionOperator(SA_DiceExpressionOperator operator);
  68. NSString *NSStringFromSA_DiceExpressionRollCommand(SA_DiceExpressionRollCommand command);
  69. NSString *NSStringFromSA_DiceExpressionRollModifier(SA_DiceExpressionRollModifier modifier);
  70. NSString *NSStringFromSA_DiceExpressionError(SA_DiceExpressionError error);
  71. @class SA_DiceExpression;
  72. NSComparisonResult compareEvaluatedExpressionsByResult(SA_DiceExpression *expression1,
  73. SA_DiceExpression *expression2);
  74. NSComparisonResult compareEvaluatedExpressionsByAttemptBonus(SA_DiceExpression *expression1,
  75. SA_DiceExpression *expression2);
  76. /*************************************************/
  77. #pragma mark - SA_DiceExpression class declaration
  78. /*************************************************/
  79. @interface SA_DiceExpression : NSObject <NSCopying>
  80. /************************/
  81. #pragma mark - Properties
  82. /************************/
  83. @property SA_DiceExpressionTermType type;
  84. @property NSUInteger errorBitMask;
  85. @property SA_DiceExpressionOperator operator;
  86. @property (nonatomic, strong) SA_DiceExpression *leftOperand;
  87. @property (nonatomic, strong) SA_DiceExpression *rightOperand;
  88. @property SA_DiceExpressionRollCommand rollCommand;
  89. @property (nonatomic, strong) SA_DiceExpression *dieCount;
  90. @property (nonatomic, strong) SA_DiceExpression *dieSize;
  91. @property SA_DiceExpressionDieType dieType;
  92. @property SA_DiceExpressionRollModifier rollModifier;
  93. @property (nonatomic, strong) NSNumber *value;
  94. @property (copy, nonatomic) NSString *inputString;
  95. @property (copy, nonatomic) NSAttributedString *attributedInputString;
  96. @property (nonatomic, strong) NSNumber *result;
  97. @property (nonatomic, strong) NSArray <NSNumber *> *rolls;
  98. @end