aboutsummaryrefslogblamecommitdiffstats
path: root/library/cpp/string_utils/scan/scan.h
blob: 703db5432163729b7473df12c65bfeab6525ef01 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                
                                                         
                                                      
                        
 
                        
                             
 
                          
                                
         
                                     
                                       
                                               

         
#pragma once

#include <util/generic/strbuf.h>

template <bool addAll, char sep, char sepKeyVal, class F>
static inline void ScanKeyValue(TStringBuf s, F&& f) {
    TStringBuf key, val;

    while (!s.empty()) {
        val = s.NextTok(sep);

        if (val.empty()) {
            continue; // && case
        }

        key = val.NextTok(sepKeyVal);

        if (addAll || val.IsInited()) {
            f(key, val); // includes empty keys
        }
    }
}