encoder.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * encoder.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "schema/base.h"
  12. #include "schema/v13/types.h"
  13. namespace MMAI::BAI::V13
  14. {
  15. using GA = Schema::V13::GlobalAttribute;
  16. using HA = Schema::V13::HexAttribute;
  17. using PA = Schema::V13::PlayerAttribute;
  18. using BS = Schema::BattlefieldState;
  19. struct EncoderInput
  20. {
  21. const std::string_view & attrname;
  22. const int a;
  23. const Schema::V13::Encoding e;
  24. const int n;
  25. const int vmax;
  26. const double p;
  27. const int v;
  28. };
  29. class Encoder
  30. {
  31. public:
  32. static void Encode(HA a, int v, BS & out);
  33. static void Encode(PA a, int v, BS & out);
  34. static void Encode(GA a, int v, BS & out);
  35. static void Encode(const EncoderInput & in, BS & out);
  36. static void EncodeAccumulatingExplicitNull(int v, int n, BS & out);
  37. static void EncodeAccumulatingImplicitNull(int v, int n, BS & out);
  38. static void EncodeAccumulatingMaskingNull(int v, int n, BS & out);
  39. static void EncodeAccumulatingStrictNull(int v, int n, BS & out);
  40. static void EncodeAccumulatingZeroNull(int v, int n, BS & out);
  41. static void EncodeBinaryExplicitNull(int v, int n, BS & out);
  42. static void EncodeBinaryMaskingNull(int v, int n, BS & out);
  43. static void EncodeBinaryStrictNull(int v, int n, BS & out);
  44. static void EncodeBinaryZeroNull(int v, int n, BS & out);
  45. static void EncodeCategoricalExplicitNull(int v, int n, BS & out);
  46. static void EncodeCategoricalImplicitNull(int v, int n, BS & out);
  47. static void EncodeCategoricalMaskingNull(int v, int n, BS & out);
  48. static void EncodeCategoricalStrictNull(int v, int n, BS & out);
  49. static void EncodeCategoricalZeroNull(int v, int n, BS & out);
  50. static void EncodeExpnormExplicitNull(int v, int vmax, double slope, BS & out);
  51. static void EncodeExpnormMaskingNull(int v, int vmax, double slope, BS & out);
  52. static void EncodeExpnormStrictNull(int v, int vmax, double slope, BS & out);
  53. static void EncodeExpnormZeroNull(int v, int vmax, double slope, BS & out);
  54. static void EncodeLinnormExplicitNull(int v, int vmax, BS & out);
  55. static void EncodeLinnormMaskingNull(int v, int vmax, BS & out);
  56. static void EncodeLinnormStrictNull(int v, int vmax, BS & out);
  57. static void EncodeLinnormZeroNull(int v, int vmax, BS & out);
  58. static float CalcExpnorm(int v, int vmax, double slope);
  59. static float CalcLinnorm(int v, int vmax);
  60. private:
  61. static void EncodeAccumulating(int v, int n, BS & out);
  62. static void EncodeBinary(int v, int n, BS & out);
  63. static void EncodeCategorical(int v, int n, BS & out);
  64. static void EncodeExpnorm(int v, int vmax, double slope, BS & out);
  65. static void EncodeLinnorm(int v, int vmax, BS & out);
  66. };
  67. }