Hızlı Eşlemlerle Arama
Önceki GNU Regex İşlevleri Sonraki
Hızlı Eşlemlerle Arama
Uzun bir dizge üzerinde arama yapıyorsanız bir hızlı eşlem kullanmalısınız. Bu olmaksızın, arayıcı dizge içinde ardarda her konumda eşleşme dener. Genellikle, dizge içindeki karakterlerin pek çoğu bir eşlemeyi başlatamaz. Dizge içindeki belirli bir noktadan eşleme yapmayı denemek, karakterin bir eşlemeyi başlatıp başlatamayacağını bir tablodan kontrol etmekten çok daha fazla vakte mal olur. İşte hızlı eşlem böyle bir tablodur.
Daha belirgin olarak, bir hızlı eşlem karakter kümenizdeki karakterlerle indislenmiş bir dizidir. Bundan dolayı, ascii karakter kodlaması altında bir hızlı eşlem 256 elemanlıdır. Arayıcının belirtilmiş bir şablon tamponu ile bir hızlı eşlemi kullanmasını isterseniz, bellekte dizi için yer ayırmalı ve dizinin adresini şablon tamponunun fastmap alanına atamalısınız:
#define BYTEWIDTH 8

struct re_pattern_buffer compiled;
char fastmap[1 << BYTEWIDTH];

compiled.fastmap = fastmap;
Ya hızlı eşlemi siz derlersiniz ya da re_search bunu sizin için yapar; fastmap alanının değeri sıfırdan farklı ise özel olarak derlenmiş bir şablonu kullanarak yapacağınız ilk arama sırasında hızlı eşlem re_search tarafından derlenir.
int re_compile_fastmap
(struct re_pattern_buffer *şablon_tamponu)
işlev
Bir hızlı eşlemi kendiniz derlemek isterseniz bu işlevi kullanmalısınız. şablon_tamponu bir şablon tamponunun adresidir. c karakteri şablon için bir eşleşme başlatmalıysa, re_compile_fastmap, şablon_tamponu->fastmap[c] değerini sıfırdan farklı yapar. Hızlı eşlem derlenebilmişse işlev sıfır değeriyle, bir iç hata oluşmuşsa -2 değeriyle döner. Örneğin, | bir VEYA işleci ise ve şablon_tamponu, a|b ifadesi için derlenmiş şablonu içeriyorsa, re_compile_fastmap işlevi sadece fastmap['a'] ve fastmap['b'] değerlerini sıfırdan farklı yapar.
re_search dizge içinde hareket ederken hızlı eşlem kullanırsa, dizge içindeki karakterleri hızlı eşlem içindeki karakterlerden birini buluncaya kadar ilerler ve bu karakterden itibaren eşleştirmeyi dener. Eğer eşleşme olmazsa işlemi tekrarlar. Böylece bir hızlı eşlem kullanılarak dizge içinde zaten eşleşmeyecek konumlarda re_search eşleştirme için zaman harcamaz.
re_search işlevinin hızlı eşlem kullanmasını istemeseniz, işlevi çağırmadan önce şablon tamponunun fastmap alanına sıfır atayın.
Bir şablon tamponunun fastmap alanını bir kere ilklendirdikten sonra, bir daha bunu yapmaya ihtiyacınız olmaz -- içinde yeni bir şablon derleseniz bile -- yeter ki, alan sizin bir hızlı eşlem isteyip istemediğinize tepki vermeye ayarlı olsun.
Önceki Üst Ana Başlık Sonraki
Veriyi Bölerek Arama ve Eşleştirme Başlangıç GNU Çeviri Tabloları
Bir Linux Kitaplığı Sayfası