Forum de la communauté SFML

Général => Suggestions de nouvelles fonctionnalités => Discussion démarrée par: germinolegrand le Août 27, 2012, 12:42:36 pm

Titre: sf::Packet proposer une 2e interface non modifiante
Posté par: germinolegrand le Août 27, 2012, 12:42:36 pm
Actuellement, lorsqu'on souhaite extraire une donnée de sf::Packet, il n'est plus possible de lire cette donnée déjà extraite. La seule façon de le faire est d'utiliser getData et de faire quelques casts horribles qui ne devraient pas avoir lieu d'être puisqu'il faut pour cela connaître la construction interne de sf::Packet pour s'assurer de son fonctionnement. Si je veux récupérer le premier char :
char data = *reinterpret_cast<const char*>(packet.getData());
C'est juste moche :o.

Je propose d'ajouter une fonction template :
template <class T>
void Packet::get(T &data)
{
    *this >> data;
      m_readPos -= sizeof(data);
}

 

Ou alors mieux : proposer des fonctions pour sauvegarder une position dans un sf::Packet pour l'y faire revenir plus tard (en clair on sauvegarde m_readPos). Ainsi que les positions statiques définies à l'avance : begin et end.

La 1e solution n'est qu'une solution vite fait, tandis que la 2e s'inscrit plus dans la logique des flux (voir std::fstream et compagnie).
Titre: Re : sf::Packet proposer une 2e interface non modifiante
Posté par: danman le Août 27, 2012, 02:00:30 pm
tu ne peux pas faire ca ? : (pas testé)
char data;
packet >> data;

ca devrait revenir au même non ?
 
Titre: Re : sf::Packet proposer une 2e interface non modifiante
Posté par: Laurent le Août 27, 2012, 08:26:39 pm
Y a plein de tickets sur le tracker pour sf::Packet, je pense que ta demande est déjà couverte.
Titre: Re : sf::Packet proposer une 2e interface non modifiante
Posté par: germinolegrand le Août 30, 2012, 12:49:06 pm
En effet #112
sf::Packet has no Seek function for random access