/ src / minisketch / src / fields / generic_1byte.cpp
generic_1byte.cpp
  1  /**********************************************************************
  2   * Copyright (c) 2018 Pieter Wuille, Greg Maxwell, Gleb Naumenko      *
  3   * Distributed under the MIT software license, see the accompanying   *
  4   * file LICENSE or http://www.opensource.org/licenses/mit-license.php.*
  5   **********************************************************************/
  6  
  7  /* This file was substantially auto-generated by doc/gen_params.sage. */
  8  #include "../fielddefines.h"
  9  
 10  #if defined(ENABLE_FIELD_BYTES_INT_1)
 11  
 12  #include "generic_common_impl.h"
 13  
 14  #include "../lintrans.h"
 15  #include "../sketch_impl.h"
 16  
 17  #endif
 18  
 19  #include "../sketch.h"
 20  
 21  namespace {
 22  #ifdef ENABLE_FIELD_INT_2
 23  // 2 bit field
 24  typedef RecLinTrans<uint8_t, 2> StatTable2;
 25  typedef RecLinTrans<uint8_t, 2> DynTable2;
 26  constexpr StatTable2 SQR_TABLE_2({0x1, 0x3});
 27  constexpr StatTable2 QRT_TABLE_2({0x2, 0});
 28  typedef Field<uint8_t, 2, 3, StatTable2, DynTable2, &SQR_TABLE_2, &QRT_TABLE_2> Field2;
 29  #endif
 30  
 31  #ifdef ENABLE_FIELD_INT_3
 32  // 3 bit field
 33  typedef RecLinTrans<uint8_t, 3> StatTable3;
 34  typedef RecLinTrans<uint8_t, 3> DynTable3;
 35  constexpr StatTable3 SQR_TABLE_3({0x1, 0x4, 0x6});
 36  constexpr StatTable3 QRT_TABLE_3({0, 0x4, 0x6});
 37  typedef Field<uint8_t, 3, 3, StatTable3, DynTable3, &SQR_TABLE_3, &QRT_TABLE_3> Field3;
 38  #endif
 39  
 40  #ifdef ENABLE_FIELD_INT_4
 41  // 4 bit field
 42  typedef RecLinTrans<uint8_t, 4> StatTable4;
 43  typedef RecLinTrans<uint8_t, 4> DynTable4;
 44  constexpr StatTable4 SQR_TABLE_4({0x1, 0x4, 0x3, 0xc});
 45  constexpr StatTable4 QRT_TABLE_4({0x6, 0xa, 0x8, 0});
 46  typedef Field<uint8_t, 4, 3, StatTable4, DynTable4, &SQR_TABLE_4, &QRT_TABLE_4> Field4;
 47  #endif
 48  
 49  #ifdef ENABLE_FIELD_INT_5
 50  // 5 bit field
 51  typedef RecLinTrans<uint8_t, 5> StatTable5;
 52  typedef RecLinTrans<uint8_t, 3, 2> DynTable5;
 53  constexpr StatTable5 SQR_TABLE_5({0x1, 0x4, 0x10, 0xa, 0xd});
 54  constexpr StatTable5 QRT_TABLE_5({0x14, 0x8, 0xa, 0, 0xe});
 55  typedef Field<uint8_t, 5, 5, StatTable5, DynTable5, &SQR_TABLE_5, &QRT_TABLE_5> Field5;
 56  #endif
 57  
 58  #ifdef ENABLE_FIELD_INT_6
 59  // 6 bit field
 60  typedef RecLinTrans<uint8_t, 6> StatTable6;
 61  typedef RecLinTrans<uint8_t, 3, 3> DynTable6;
 62  constexpr StatTable6 SQR_TABLE_6({0x1, 0x4, 0x10, 0x3, 0xc, 0x30});
 63  constexpr StatTable6 QRT_TABLE_6({0x3a, 0x26, 0x24, 0x14, 0x20, 0});
 64  typedef Field<uint8_t, 6, 3, StatTable6, DynTable6, &SQR_TABLE_6, &QRT_TABLE_6> Field6;
 65  #endif
 66  
 67  #ifdef ENABLE_FIELD_INT_7
 68  // 7 bit field
 69  typedef RecLinTrans<uint8_t, 4, 3> StatTable7;
 70  typedef RecLinTrans<uint8_t, 4, 3> DynTable7;
 71  constexpr StatTable7 SQR_TABLE_7({0x1, 0x4, 0x10, 0x40, 0x6, 0x18, 0x60});
 72  constexpr StatTable7 QRT_TABLE_7({0, 0x14, 0x16, 0x72, 0x12, 0x40, 0x7a});
 73  typedef Field<uint8_t, 7, 3, StatTable7, DynTable7, &SQR_TABLE_7, &QRT_TABLE_7> Field7;
 74  #endif
 75  
 76  #ifdef ENABLE_FIELD_INT_8
 77  // 8 bit field
 78  typedef RecLinTrans<uint8_t, 4, 4> StatTable8;
 79  typedef RecLinTrans<uint8_t, 4, 4> DynTable8;
 80  constexpr StatTable8 SQR_TABLE_8({0x1, 0x4, 0x10, 0x40, 0x1b, 0x6c, 0xab, 0x9a});
 81  constexpr StatTable8 QRT_TABLE_8({0xbc, 0x2a, 0x28, 0x86, 0x2c, 0xde, 0x8e, 0});
 82  typedef Field<uint8_t, 8, 27, StatTable8, DynTable8, &SQR_TABLE_8, &QRT_TABLE_8> Field8;
 83  #endif
 84  }
 85  
 86  Sketch* ConstructGeneric1Byte(int bits, int implementation)
 87  {
 88      switch (bits) {
 89  #ifdef ENABLE_FIELD_INT_2
 90      case 2: return new SketchImpl<Field2>(implementation, 2);
 91  #endif
 92  #ifdef ENABLE_FIELD_INT_3
 93      case 3: return new SketchImpl<Field3>(implementation, 3);
 94  #endif
 95  #ifdef ENABLE_FIELD_INT_4
 96      case 4: return new SketchImpl<Field4>(implementation, 4);
 97  #endif
 98  #ifdef ENABLE_FIELD_INT_5
 99      case 5: return new SketchImpl<Field5>(implementation, 5);
100  #endif
101  #ifdef ENABLE_FIELD_INT_6
102      case 6: return new SketchImpl<Field6>(implementation, 6);
103  #endif
104  #ifdef ENABLE_FIELD_INT_7
105      case 7: return new SketchImpl<Field7>(implementation, 7);
106  #endif
107  #ifdef ENABLE_FIELD_INT_8
108      case 8: return new SketchImpl<Field8>(implementation, 8);
109  #endif
110      default: return nullptr;
111      }
112  }