1. JavaScript / Говнокод #19577

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    module Bert {
      export class Decoder {
        private b: ArrayBuffer;
        private d: DataView;
        private i: number = 0;
        result: any;
        constructor(packet: ArrayBuffer) {
          this.b = packet;
          this.d = new DataView(packet);
          if (131 == this.d.getUint8(this.i++)) {
            this.result = this.decode();
          } else {
            throw 'Not BERT';
          }
        }
        decode() {
          var tag = this.d.getUint8(this.i++);
          var r: any;
          switch (tag) {
            case 100: r = this.decodeAtom(); break; // latin1 atom
            case 107: r = this.decodeString(); break; // utf8 string
            case 109: r = this.decodeBinary(); break; // utf8 binary string
            case 115: r = this.decodeSmallAtom(); break; // latin1 atom
            case 118: r = this.decodeAtom(); break; // utf8 atom
            case 119: r = this.decodeSmallAtom(); break; // utf8 atom
          }
          return r;
        }
        decodeAtom() {
          var length = this.d.getUint16(this.i);
          this.i += 2;
          var dec = new Utf8.Decoder(this.b.slice(this.i, this.i + length));
          this.i += length;
          return dec.result;
        }
        decodeSmallAtom() {
          var length = this.d.getUint8(this.i++);
          var dec = new Utf8.Decoder(this.b.slice(this.i, this.i + length));
          this.i += length;
          return dec.result;
        }
        decodeString() {
          var length = this.d.getUint16(this.i);
          this.i += 2;
          var dec = new Utf8.Decoder(this.b.slice(this.i, this.i + length));
          this.i += length;
          return dec.result;
        }
        decodeBinary() {
          var length = this.d.getUint32(this.i);
          this.i += 4;
          var dec = new Utf8.Decoder(this.b.slice(this.i, this.i + length));
          this.i += length;
          return dec.result;
        }
        ...
      }
    }

    Перед тем, как избавлюсь от повторяющегося кода в нижней части
    (typescript)

    Запостил: kgm-rj, 04 Марта 2016

    Комментарии (5) RSS

    Добавить комментарий