Comment peut-on utiliser la lib Boost.Regex sur un buffer
en mémoire dont on connaît la taille,
typiquement un fichier mappé en mémoire (memory mapped file)
sans le copier dans une string (trop facile).
Il est fort souhaitable que ça soit une solution dans l'esprit de la STL.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
James Kanze
"Vladimir Votiakov" writes:
|> Quelqu'un peut me mettre sur une piste :
|> Comment peut-on utiliser la lib Boost.Regex sur un buffer en |> mémoire dont on connaît la taille, typiquement un fichier |> mappé en mémoire (memory mapped file) sans le copier dans une |> string (trop facile).
|> Il est fort souhaitable que ça soit une solution dans l'esprit de la STL.
|> Je vois vaguement un stream quelconque...
Au contraire. Les expressions rationnelles de Boost cherchent dans un intervalle défini par des itérateurs bidirectionnels STL ; il ne peuvent donc pas travailler sur des flux. En revanche, un tableau de type C (et donc, un fichier mappé mémoire), c'est bien une collection STL qui supporte des itérateurs aléatoires (et donc bidirectionnels). Par exemple :
class FileContents { public: typedef char value_type ; typedef char* iterator ; typedef char const* const_iterator ; // Et les autres...
(En passant, je suis curieux pourquoi il leur faut un itérateur bi-directionnel. J'aurais cru qu'un itérateur forward aurait suffit.)
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
"Vladimir Votiakov" <vvot.001@9online.fr> writes:
|> Quelqu'un peut me mettre sur une piste :
|> Comment peut-on utiliser la lib Boost.Regex sur un buffer en
|> mémoire dont on connaît la taille, typiquement un fichier
|> mappé en mémoire (memory mapped file) sans le copier dans une
|> string (trop facile).
|> Il est fort souhaitable que ça soit une solution dans l'esprit de la STL.
|> Je vois vaguement un stream quelconque...
Au contraire. Les expressions rationnelles de Boost cherchent dans un
intervalle défini par des itérateurs bidirectionnels STL ; il ne
peuvent donc pas travailler sur des flux. En revanche, un tableau de
type C (et donc, un fichier mappé mémoire), c'est bien une
collection STL qui supporte des itérateurs aléatoires (et donc
bidirectionnels). Par exemple :
class FileContents
{
public:
typedef char value_type ;
typedef char* iterator ;
typedef char const* const_iterator ;
// Et les autres...
(En passant, je suis curieux pourquoi il leur faut un itérateur
bi-directionnel. J'aurais cru qu'un itérateur forward aurait suffit.)
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> Comment peut-on utiliser la lib Boost.Regex sur un buffer en |> mémoire dont on connaît la taille, typiquement un fichier |> mappé en mémoire (memory mapped file) sans le copier dans une |> string (trop facile).
|> Il est fort souhaitable que ça soit une solution dans l'esprit de la STL.
|> Je vois vaguement un stream quelconque...
Au contraire. Les expressions rationnelles de Boost cherchent dans un intervalle défini par des itérateurs bidirectionnels STL ; il ne peuvent donc pas travailler sur des flux. En revanche, un tableau de type C (et donc, un fichier mappé mémoire), c'est bien une collection STL qui supporte des itérateurs aléatoires (et donc bidirectionnels). Par exemple :
class FileContents { public: typedef char value_type ; typedef char* iterator ; typedef char const* const_iterator ; // Et les autres...
(En passant, je suis curieux pourquoi il leur faut un itérateur bi-directionnel. J'aurais cru qu'un itérateur forward aurait suffit.)
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93