|  | // Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import 'dart:typed_data'; | 
|  | import 'state_enum.dart'; | 
|  |  | 
|  | bool match(Uint8List s) { | 
|  | int i = 0; | 
|  |  | 
|  | var state = State.start; | 
|  |  | 
|  | OUTER: | 
|  | while (true) { | 
|  | if (i == s.length) break; | 
|  | final zero = s[i++] == 48; | 
|  |  | 
|  | switch (state) { | 
|  | case State.start: | 
|  | state = zero ? State.a1 : State.extended1; | 
|  | break; | 
|  |  | 
|  | // 0xxxxxxx | 
|  | //  ^ | 
|  | case State.a1: | 
|  | state = State.a2; | 
|  | break; | 
|  | case State.a2: | 
|  | state = State.a3; | 
|  | break; | 
|  | case State.a3: | 
|  | state = State.a4; | 
|  | break; | 
|  | case State.a4: | 
|  | state = State.a5; | 
|  | break; | 
|  | case State.a5: | 
|  | state = State.a6; | 
|  | break; | 
|  | case State.a6: | 
|  | state = State.a7; | 
|  | break; | 
|  | case State.a7: | 
|  | state = State.start; | 
|  | break; | 
|  |  | 
|  | case State.error: | 
|  | break OUTER; | 
|  |  | 
|  | // 110xxxxx 10xxxxxx | 
|  | //  ^ | 
|  | // 1110xxxx 10xxxxxx 10xxxxxx | 
|  | // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 
|  | case State.extended1: | 
|  | state = zero ? State.error : State.extended2; | 
|  | break; | 
|  | case State.extended2: | 
|  | state = zero ? State.two3 : State.extended3; | 
|  | break; | 
|  | case State.extended3: | 
|  | state = zero ? State.three4 : State.extended4; | 
|  | break; | 
|  | case State.extended4: | 
|  | state = zero ? State.four5 : State.error; | 
|  | break; | 
|  |  | 
|  | case State.two3: | 
|  | state = State.two4; | 
|  | break; | 
|  | case State.two4: | 
|  | state = State.two5; | 
|  | break; | 
|  | case State.two5: | 
|  | state = State.two6; | 
|  | break; | 
|  | case State.two6: | 
|  | state = State.two7; | 
|  | break; | 
|  | case State.two7: | 
|  | state = State.last0; | 
|  | break; | 
|  |  | 
|  | case State.three4: | 
|  | state = State.three5; | 
|  | break; | 
|  | case State.three5: | 
|  | state = State.three6; | 
|  | break; | 
|  | case State.three6: | 
|  | state = State.three7; | 
|  | break; | 
|  | case State.three7: | 
|  | state = State.prev0; | 
|  | break; | 
|  |  | 
|  | case State.four5: | 
|  | state = State.four6; | 
|  | break; | 
|  | case State.four6: | 
|  | state = State.four7; | 
|  | break; | 
|  | case State.four7: | 
|  | state = State.first0; | 
|  | break; | 
|  |  | 
|  | // 10xxxxxx 10xxxxxx 10xxxxxx | 
|  | case State.first0: | 
|  | state = zero ? State.error : State.first1; | 
|  | break; | 
|  | case State.first1: | 
|  | state = zero ? State.first2 : State.error; | 
|  | break; | 
|  | case State.first2: | 
|  | state = State.first3; | 
|  | break; | 
|  | case State.first3: | 
|  | state = State.first4; | 
|  | break; | 
|  | case State.first4: | 
|  | state = State.first5; | 
|  | break; | 
|  | case State.first5: | 
|  | state = State.first6; | 
|  | break; | 
|  | case State.first6: | 
|  | state = State.first7; | 
|  | break; | 
|  | case State.first7: | 
|  | state = State.prev0; | 
|  | break; | 
|  |  | 
|  | // 10xxxxxx 10xxxxxx | 
|  | case State.prev0: | 
|  | state = zero ? State.error : State.prev1; | 
|  | break; | 
|  | case State.prev1: | 
|  | state = zero ? State.prev2 : State.error; | 
|  | break; | 
|  | case State.prev2: | 
|  | state = State.prev3; | 
|  | break; | 
|  | case State.prev3: | 
|  | state = State.prev4; | 
|  | break; | 
|  | case State.prev4: | 
|  | state = State.prev5; | 
|  | break; | 
|  | case State.prev5: | 
|  | state = State.prev6; | 
|  | break; | 
|  | case State.prev6: | 
|  | state = State.prev7; | 
|  | break; | 
|  | case State.prev7: | 
|  | state = State.last0; | 
|  | break; | 
|  |  | 
|  | // 10xxxxxx | 
|  | case State.last0: | 
|  | state = zero ? State.error : State.last1; | 
|  | break; | 
|  | case State.last1: | 
|  | state = zero ? State.last2 : State.error; | 
|  | break; | 
|  | case State.last2: | 
|  | state = State.last3; | 
|  | break; | 
|  | case State.last3: | 
|  | state = State.last4; | 
|  | break; | 
|  | case State.last4: | 
|  | state = State.last5; | 
|  | break; | 
|  | case State.last5: | 
|  | state = State.last6; | 
|  | break; | 
|  | case State.last6: | 
|  | state = State.last7; | 
|  | break; | 
|  | case State.last7: | 
|  | state = State.start; | 
|  | break; | 
|  | } | 
|  | } | 
|  | return state == State.start; | 
|  | } |