MEDIUM: pattern: delete() function uses the pat_ref_elt to find the element to be removed

All the pattern delete function can use her reference to the original
"struct pat_ref_elt" to find the element to be remove. The functions
pat_del_list_str() and pat_del_meth() were deleted because after
applying this modification, they have the same code than pat_del_list_ptr().
diff --git a/include/proto/pattern.h b/include/proto/pattern.h
index e6afa51..be9975e 100644
--- a/include/proto/pattern.h
+++ b/include/proto/pattern.h
@@ -68,12 +68,11 @@
  * never fails.
  *
  */
-void pat_del_list_val(struct pattern_expr *expr, struct pattern *pat);
-void pat_del_tree_ip(struct pattern_expr *expr, struct pattern *pat);
-void pat_del_list_ptr(struct pattern_expr *expr, struct pattern *pat);
-void pat_del_tree_str(struct pattern_expr *expr, struct pattern *pat);
-void pat_del_list_str(struct pattern_expr *expr, struct pattern *pat);
-void pat_del_list_reg(struct pattern_expr *expr, struct pattern *pat);
+void pat_del_list_val(struct pattern_expr *expr, struct pat_ref_elt *ref);
+void pat_del_tree_ip(struct pattern_expr *expr, struct pat_ref_elt *ref);
+void pat_del_list_ptr(struct pattern_expr *expr, struct pat_ref_elt *ref);
+void pat_del_tree_str(struct pattern_expr *expr, struct pat_ref_elt *ref);
+void pat_del_list_reg(struct pattern_expr *expr, struct pat_ref_elt *ref);
 
 /*
  *
@@ -191,6 +190,7 @@
 int pat_ref_add(struct pat_ref *ref, const char *pattern, const char *sample, char **err);
 int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample);
 int pat_ref_delete(struct pat_ref *ref, const char *key);
+int pat_ref_delete_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt);
 void pat_ref_prune(struct pat_ref *ref);
 int pat_ref_load(struct pat_ref *ref, struct pattern_expr *expr, int patflags, int soe, char **err);
 
@@ -208,7 +208,7 @@
 struct pattern_expr *pattern_lookup_expr(struct pattern_head *head, struct pat_ref *ref);
 struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref, char **err);
 struct sample_storage **pattern_find_smp(const char *key, struct pattern_expr *expr, char **err);
-int pattern_delete(const char *key, struct pattern_expr *expr, char **err);
+int pattern_delete(struct pattern_expr *expr, struct pat_ref_elt *ref);
 
 
 #endif
diff --git a/include/types/acl.h b/include/types/acl.h
index c0b5ace..1956ec3 100644
--- a/include/types/acl.h
+++ b/include/types/acl.h
@@ -94,7 +94,7 @@
 	char *fetch_kw;
 	int (*parse)(const char *text, struct pattern *pattern, char **err);
 	int (*index)(struct pattern_expr *expr, struct pattern *pattern, char **err);
-	void (*delete)(struct pattern_expr *expr, struct pattern *pattern);
+	void (*delete)(struct pattern_expr *expr, struct pat_ref_elt *);
 	struct sample_storage **(*find_smp)(struct pattern_expr *, struct pattern *);
 	void (*prune)(struct pattern_expr *expr);
 	struct pattern *(*match)(struct sample *smp, struct pattern_expr *expr, int fill);
diff --git a/include/types/pattern.h b/include/types/pattern.h
index 7fa860f..a9dd033 100644
--- a/include/types/pattern.h
+++ b/include/types/pattern.h
@@ -207,7 +207,7 @@
 	int (*parse)(const char *text, struct pattern *pattern, char **err);
 	int (*parse_smp)(const char *text, struct sample_storage *smp);
 	int (*index)(struct pattern_expr *, struct pattern *, char **);
-	void (*delete)(struct pattern_expr *, struct pattern *);
+	void (*delete)(struct pattern_expr *, struct pat_ref_elt *);
 	struct sample_storage **(*find_smp)(struct pattern_expr *, struct pattern *);
 	void (*prune)(struct pattern_expr *);
 	struct pattern *(*match)(struct sample *, struct pattern_expr *, int);
@@ -219,7 +219,7 @@
 extern char *pat_match_names[PAT_MATCH_NUM];
 extern int (*pat_parse_fcts[PAT_MATCH_NUM])(const char *, struct pattern *, char **);
 extern int (*pat_index_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *, char **);
-extern void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *);
+extern void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pat_ref_elt *);
 extern struct sample_storage **(*pat_find_smp_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pattern *);
 void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *);
 extern struct pattern *(*pat_match_fcts[PAT_MATCH_NUM])(struct sample *, struct pattern_expr *, int);