Giriş
qi::locals parse edilmiş yerel bir değişken içinde saklanması ve başke bir parser içinde kullanılması içindir.
Örnek
Şöyle yaparız. _len değişkeni payload'un büyüklüğünü tutar. repeat ile bu kadar byte okunur.
Örnek
Şöyle yaparız.
qi::locals parse edilmiş yerel bir değişken içinde saklanması ve başke bir parser içinde kullanılması içindir.
Örnek
Şöyle yaparız. _len değişkeni payload'un büyüklüğünü tutar. repeat ile bu kadar byte okunur.
template <typename It>
struct FileFormat : qi::grammar<It, FormatData()> {
FileFormat() : FileFormat::base_type(start) {
using namespace qi;
signature = string("SIGN"); // 4 byte signature, just for example
header = repeat(16) [byte_]; // 16 byte header, same
payload %= omit[little_word[_len=_1]] >> repeat(_len) [byte_];
start = signature >> header >> payload;
//BOOST_SPIRIT_DEBUG_NODES((start)(signature)(header)(payload))
}
private:
qi::rule<It, FormatData()> start;
qi::rule<It, std::string()> signature, header;
qi::_a_type _len;
qi::rule<It, std::string(), qi::locals<uint16_t> > payload;
};
Şöyle yaparız.
qi::rule<decltype(it), qi::locals<int> > p;
{
using namespace qi;
_a_type objSize; // the first local placeholder
p = (
(char_('\x01'))
>> (char_[objSize = phx::bind(getObjSize, _1)])
>> (repeat(objSize)[char_])
);
}
Hiç yorum yok:
Yorum Gönder