// Path: src/main/java/net/kimleo/rec/common/Pair.java
// public class Pair<K, V> {
//     public final K first;
//     public final V second;
// 
// 
//     public Pair(K first, V second) {
//         this.first = first;
//         this.second = second;
//     }
// 
//     public K getFirst() {
//         return first;
//     }
// 
//     public V getSecond() {
//         return second;
//     }
// 
// }
// 
// Path: src/main/java/net/kimleo/rec/util/CollectUtils.java
// public static <T> Iterable<T> reversed(List<T> list) {
// 
// 
//     return () -> {
//         ListIterator<T> li = list.listIterator(list.size());
// 
//         return new Iterator<T>() {
//             @Override
//             public boolean hasNext() {
//                 return li.hasPrevious();
//             }
// 
//             @Override
//             public T next() {
//                 return li.previous();
//             }
//         };
//     };
// }


import net.kimleo.rec.common.Pair;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static net.kimleo.rec.util.CollectUtils.reversed;
package net.kimleo.rec.v2.accessor.lexer;




public class Lexer {
    public static final Pattern PADDING_PATTERN = Pattern.compile("\\{(\\d+)}");


    public static Pair<Map<String, Integer>, Integer> buildFieldMapPair(String... fields) {
        final Map<String, Integer> accessorMap = new LinkedHashMap<>();
        final Pair<List<FieldType>, Integer> lex = lex(fields);
        final List<FieldType> accessors = lex.getFirst();
        final Integer leastCapacity = lex.getSecond();
// Path: src/main/java/net/kimleo/rec/common/Pair.java
// public class Pair<K, V> {
//     public final K first;
//     public final V second;
// 
// 
//     public Pair(K first, V second) {
//         this.first = first;
//         this.second = second;
//     }
// 
//     public K getFirst() {
//         return first;
//     }
// 
//     public V getSecond() {
//         return second;
//     }
// 
// }
// 
// Path: src/main/java/net/kimleo/rec/util/CollectUtils.java
// public static <T> Iterable<T> reversed(List<T> list) {
// 
// 
//     return () -> {
//         ListIterator<T> li = list.listIterator(list.size());
// 
//         return new Iterator<T>() {
//             @Override
//             public boolean hasNext() {
//                 return li.hasPrevious();
//             }
// 
//             @Override
//             public T next() {
//                 return li.previous();
//             }
//         };
//     };
// }


// Path: src/main/java/net/kimleo/rec/v2/accessor/lexer/Lexer.java
import net.kimleo.rec.common.Pair;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static net.kimleo.rec.util.CollectUtils.reversed;

package net.kimleo.rec.v2.accessor.lexer;




public class Lexer {
    public static final Pattern PADDING_PATTERN = Pattern.compile("\\{(\\d+)}");


    public static Pair<Map<String, Integer>, Integer> buildFieldMapPair(String... fields) {
        final Map<String, Integer> accessorMap = new LinkedHashMap<>();
        final Pair<List<FieldType>, Integer> lex = lex(fields);
        final List<FieldType> accessors = lex.getFirst();
        final Integer leastCapacity = lex.getSecond();
        boolean reversed = buildFieldMaps(accessorMap, accessors, 0, 1);