mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-14 14:56:13 -05:00
added thread safe string match
This commit is contained in:
parent
004d0d41fa
commit
da99ea70a9
2 changed files with 22 additions and 8 deletions
|
|
@ -171,25 +171,36 @@ type (_,_) to_read =
|
||||||
| Grp : int * ('a, 'b) to_read -> (string -> 'a, 'b) to_read
|
| Grp : int * ('a, 'b) to_read -> (string -> 'a, 'b) to_read
|
||||||
| OptGrp : int * ('a, 'b) to_read -> (string option -> 'a, 'b) to_read
|
| OptGrp : int * ('a, 'b) to_read -> (string option -> 'a, 'b) to_read
|
||||||
|
|
||||||
let search_forward regexp_ str ?(from=0) groups cont =
|
let read_groups str groups cont =
|
||||||
let rec read_groups : type a b. (a,b) to_read -> a -> b =
|
let open Str in
|
||||||
let open Str in
|
let rec fn : type a b. (a,b) to_read -> a -> b =
|
||||||
fun groups cont ->
|
fun groups cont ->
|
||||||
match groups,cont with
|
match groups,cont with
|
||||||
| Nothing , cont -> cont
|
| Nothing , cont -> cont
|
||||||
| Begin r , cont -> read_groups r (cont (match_beginning ()))
|
| Begin r , cont -> fn r (cont (match_beginning ()))
|
||||||
| End r , cont -> read_groups r (cont (match_end ()))
|
| End r , cont -> fn r (cont (match_end ()))
|
||||||
| Grp(i,r), cont -> read_groups r (cont (matched_group i str))
|
| Grp(i,r), cont -> fn r (cont (matched_group i str))
|
||||||
| OptGrp(i,r), cont ->
|
| OptGrp(i,r), cont ->
|
||||||
let str = try Some(matched_group i str)
|
let str = try Some(matched_group i str)
|
||||||
with Not_found -> None
|
with Not_found -> None
|
||||||
in
|
in
|
||||||
read_groups r (cont str)
|
fn r (cont str)
|
||||||
in
|
in
|
||||||
|
fn groups cont
|
||||||
|
|
||||||
|
let search_forward regexp_ str ?(from=0) groups cont =
|
||||||
let open Str in
|
let open Str in
|
||||||
Mutex.lock str_mutex;
|
Mutex.lock str_mutex;
|
||||||
let _ = search_forward regexp_ str from in
|
let _ = search_forward regexp_ str from in
|
||||||
let cont = read_groups groups cont in
|
let cont = read_groups str groups cont in
|
||||||
|
Mutex.unlock str_mutex;
|
||||||
|
cont
|
||||||
|
|
||||||
|
let string_match regexp_ str ?(from=0) groups cont =
|
||||||
|
let open Str in
|
||||||
|
Mutex.lock str_mutex;
|
||||||
|
let _ = string_match regexp_ str from in
|
||||||
|
let cont = read_groups str groups cont in
|
||||||
Mutex.unlock str_mutex;
|
Mutex.unlock str_mutex;
|
||||||
cont
|
cont
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,5 +59,8 @@ type (_,_) to_read =
|
||||||
| Grp : int * ('a, 'b) to_read -> (string -> 'a, 'b) to_read
|
| Grp : int * ('a, 'b) to_read -> (string -> 'a, 'b) to_read
|
||||||
| OptGrp : int * ('a, 'b) to_read -> (string option -> 'a, 'b) to_read
|
| OptGrp : int * ('a, 'b) to_read -> (string option -> 'a, 'b) to_read
|
||||||
|
|
||||||
|
val string_match : Str.regexp -> string -> ?from:int
|
||||||
|
-> ('a,'b) to_read -> 'a -> 'b
|
||||||
|
|
||||||
val search_forward : Str.regexp -> string -> ?from:int
|
val search_forward : Str.regexp -> string -> ?from:int
|
||||||
-> ('a,'b) to_read -> 'a -> 'b
|
-> ('a,'b) to_read -> 'a -> 'b
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue