#1551 Le 20/07/2012, à 22:12
- Rolinh
Re : /* Topic des codeurs [7] */
du c++ en français, avec des templates, en camelcase inconsistent, et indenté avec une truelle ?
Mais oui, ça résume bien le fond de mes pensées... Et encore, je ne parle même pas l'organisation des fichiers, des répétitions de codes quasi identiques dans plusieurs fichiers différents (ouais, DRY ça ne veut rien dire pour certain), des typedef sur tous et n'importe quoi... J'ai des jours à passer là-dessus, j'explique même pas l'état de mes nerfs... Bon, je finis par en rire tellement c'est désespérant.
EDIT: bon, au moins c'est très verbeux: hop, un morceau de header pour la route :] :
class LangueSyntaxeFR;
typedef LangueSyntaxeFR * LangueSyntaxeFRPTR;
class LangueSyntaxeFR : public LangueSyntaxe
{
public:
LangueSyntaxeFR ();
virtual ~ LangueSyntaxeFR ();
// Syntaxe
// -------------------------------------------------------------------------
Chaine ErreurSyntaxique ();
Chaine FormatTerminalAttendu ();
Chaine Expression ();
// MODIFICATION
Chaine ExpressionListe ();
// MODIFICATION
Chaine Terme ();
Chaine Facteur ();
Chaine FacteurMalForme ();
Chaine VirguleAttendueApresConditionDUnSi ();
Chaine VirguleAttendueApresPartieAlorsDUnSi ();
Chaine FormatVirguleAttendueDansUneSequence ();
Chaine IdentOuInterrogeAttendu ();
Chaine IdentAttenduCommeNomDeFonction ();
Chaine EgaleAttenduApresEnteteDeFonction ();
Chaine IdentAttenduCommeParametreDeFonction ();
Chaine PointVirguleAttenduApresUneDefinitionDeFonction ();
Chaine FormatPointVirguleAttenduApresUneDefinitionDeFonction ();
Chaine TraceDUneDefinitionDeFonction ();
Chaine FormatTraceDUneDefinitionDeFonction ();
Chaine FormatTraceDUneEvaluation ();
Chaine ParentheseAttendueApresDesParametres ();
Chaine ArgumentsSuperflusPourUneNonFonction ();
Chaine ListeDeParametresInconnus ();
Chaine ApresUneListeDArgumentsSuperflus ();
Chaine PointVirguleAttenduApresUneEvaluation ();
Chaine TraceDUneEvaluation ();
Chaine ParentheseAttendueApresExpressionParenthesee ();
Chaine VirguleAttendueDansUneIteration ();
Chaine ParentheseAttendueApresUneIteration ();
Chaine ParentheseInattendueDansAppelDeFonctionNonParametree ();
Chaine FormatParentheseAttendueAvantUnAppelDeFonctionPredefinie ();
Chaine FormatArgumentsAttendusDansAppelDeFonction ();
Chaine ParentheseAttendueApresUnAppelDeFonction ();
Chaine FormatParentheseAttendueApresUnAppelDeFonction ();
Chaine FormatVirguleAttendueApresUnArgumentDAppel ();
Chaine ParentheseAttendueApresUneSequence ();
Chaine SequenceDExpressionsAEvaluer ();
Chaine CodeSyntaxiquementCorrect ();
Chaine CodeSyntaxiquementIncorrect ();
}; // LangueSyntaxeFR
Dernière modification par Rolinh (Le 20/07/2012, à 22:21)
Hors ligne
#1552 Le 20/07/2012, à 22:27
- maxpoulin64
Re : /* Topic des codeurs [7] */
tshirtman a écrit :du c++ en français, avec des templates, en camelcase inconsistent, et indenté avec une truelle ?
Mais oui, ça résume bien le fond de mes pensées... Et encore, je ne parle même pas l'organisation des fichiers, des répétitions de codes quasi identiques dans plusieurs fichiers différents (ouais, DRY ça ne veut rien dire pour certain), des typedef sur tous et n'importe quoi... J'ai des jours à passer là-dessus, j'explique même pas l'état de mes nerfs... Bon, je finis par en rire tellement c'est désespérant.EDIT: bon, au moins c'est très verbeux: hop, un morceau de header pour la route :] :
class LangueSyntaxeFR; typedef LangueSyntaxeFR * LangueSyntaxeFRPTR; class LangueSyntaxeFR : public LangueSyntaxe { public: LangueSyntaxeFR (); virtual ~ LangueSyntaxeFR (); // Syntaxe // ------------------------------------------------------------------------- Chaine ErreurSyntaxique (); Chaine FormatTerminalAttendu (); Chaine Expression (); // MODIFICATION Chaine ExpressionListe (); // MODIFICATION Chaine Terme (); Chaine Facteur (); Chaine FacteurMalForme (); Chaine VirguleAttendueApresConditionDUnSi (); Chaine VirguleAttendueApresPartieAlorsDUnSi (); Chaine FormatVirguleAttendueDansUneSequence (); Chaine IdentOuInterrogeAttendu (); Chaine IdentAttenduCommeNomDeFonction (); Chaine EgaleAttenduApresEnteteDeFonction (); Chaine IdentAttenduCommeParametreDeFonction (); Chaine PointVirguleAttenduApresUneDefinitionDeFonction (); Chaine FormatPointVirguleAttenduApresUneDefinitionDeFonction (); Chaine TraceDUneDefinitionDeFonction (); Chaine FormatTraceDUneDefinitionDeFonction (); Chaine FormatTraceDUneEvaluation (); Chaine ParentheseAttendueApresDesParametres (); Chaine ArgumentsSuperflusPourUneNonFonction (); Chaine ListeDeParametresInconnus (); Chaine ApresUneListeDArgumentsSuperflus (); Chaine PointVirguleAttenduApresUneEvaluation (); Chaine TraceDUneEvaluation (); Chaine ParentheseAttendueApresExpressionParenthesee (); Chaine VirguleAttendueDansUneIteration (); Chaine ParentheseAttendueApresUneIteration (); Chaine ParentheseInattendueDansAppelDeFonctionNonParametree (); Chaine FormatParentheseAttendueAvantUnAppelDeFonctionPredefinie (); Chaine FormatArgumentsAttendusDansAppelDeFonction (); Chaine ParentheseAttendueApresUnAppelDeFonction (); Chaine FormatParentheseAttendueApresUnAppelDeFonction (); Chaine FormatVirguleAttendueApresUnArgumentDAppel (); Chaine ParentheseAttendueApresUneSequence (); Chaine SequenceDExpressionsAEvaluer (); Chaine CodeSyntaxiquementCorrect (); Chaine CodeSyntaxiquementIncorrect (); }; // LangueSyntaxeFR
O_O
Par curiosité, Chaine c'est une classe au moins? Ou un typedef sur std::string ?
Hors ligne
#1553 Le 20/07/2012, à 22:35
- Pylades
Re : /* Topic des codeurs [7] */
Je penche pour un typedef sur char*…
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1554 Le 20/07/2012, à 22:49
- Rolinh
Re : /* Topic des codeurs [7] */
typedef std::string Chaine;
:[
Hors ligne
#1555 Le 21/07/2012, à 00:22
- Pylades
Re : /* Topic des codeurs [7] */
Dommage, char* aurait été plus fun.
Sinon, suis-je le seul à trouver que la classe présentée ici est buggée (le timer n’est pas stoppé si l’appel à self._timer.cancel se fait entre l’appel à self._run et l’instanciation du nouveau threading.Timer) ?
Bon, heureusement, ce n’est pas bien compliqué à corriger :
class Timeout:
def __init__(self, delay, target, args=(), kwargs={}):
self._target = target
self._args = args
self._kwargs = kwargs
self._delay = delay
self._alive = True
def _run(self):
if self._alive:
self._timer = Timer(self._delay, self._run)
self._timer.start()
self._target(*self._args, **self._kwargs)
def start(self):
self._timer = Timer(self._delay, self._run)
self._timer.start()
def stop(self):
self._alive = False
self._timer.cancel()
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1556 Le 21/07/2012, à 01:31
- Pylades
Re : /* Topic des codeurs [7] */
Tiens, sinon, le goto existe, en Python. Faut juste redéfinir frame.f_trace pour qu’il modifie frame.f_lineno comme nécessaire. Bon, après, faut réussir à se procurer un objet frame, ce qui n’est pas une mince affaire.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1557 Le 21/07/2012, à 07:27
- The Uploader
Re : /* Topic des codeurs [7] */
typedef std::string Chaine;
:[
Euh c'est vraiment débile...
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#1558 Le 21/07/2012, à 07:52
- grim7reaper
Re : /* Topic des codeurs [7] */
Et je tiens à préciser: c'est vraiment indenté comme ça partout...
Si mes souvenirs sont exact, sous Vim un coup de "gg=G" devrait débroussailler un peu l’indentation.
Sinon, suis-je le seul à trouver que la classe présentée ici est buggée (le timer n’est pas stoppé si l’appel à self._timer.cancel se fait entre l’appel à self._run et l’instanciation du nouveau threading.Timer) ?
Bon, heureusement, ce n’est pas bien compliqué à corriger
C’est surtout que tu n’as rien corrigé du tout (si problème il y a) :]
Rolinh a écrit :typedef std::string Chaine;
:[
Euh c'est vraiment débile...
Y’a peut-être un en-tête cpp_to_fr.h blindé de define et typedef pour franciser un maximum le langage…
Dernière modification par grim7reaper (Le 21/07/2012, à 07:58)
Hors ligne
#1559 Le 21/07/2012, à 07:57
- Rolinh
Re : /* Topic des codeurs [7] */
Euh c'est vraiment débile...
Personne ici ne le conteste hein ^^
Et au fait, Pylade, t'avait pas complètement tort puisqu'il y a bien, en plus de l'autre, quelque chose comme tu le pensais:
typedef char * CharPTR;
Et d'ailleurs, maintenant que j'y pense, tous les pointeurs se font typedefinir en xPTR à la manière du CharPTR >_<
En fait, il y a quand même une guideline:
- *PTR pour les types pointeurs
- *REF pour les types pointeurs sur des pointeurs
- *PFM pour les types pointeurs sur des fonctions membres de classes
Hors ligne
#1560 Le 21/07/2012, à 08:05
- Rolinh
Re : /* Topic des codeurs [7] */
Si mes souvenirs sont exact, sous Vim un coup de "gg=G" devrait débroussailler un peu l’indentation.
J'y allais à coup de ggVG= mais bon, ça aide mais ne fait pas tout, loin de là.
Y’a peut-être un en-tête cpp_to_fr.h blindé de define et typedef pour franciser un maximum le langage…
En fait nan, il y a des typedef qui traînent un peu partout, pas simplement un fichier d'en-tête qui contient tous les typedef, ça serait trop facile >_<
Exemple d'un morceau sur lequel je viens de tomber:
typedef LanguePredefinis * LanguePredefinisPTR;
typedef Chaine (LanguePredefinis :: * ChaineLanguePredefinisPFM) ();
Hors ligne
#1561 Le 21/07/2012, à 08:10
- grim7reaper
Re : /* Topic des codeurs [7] */
oO
Putain mais c’est à vomir ce code. Faut le brûler. C’est de l'obfuscation à ce niveau-là…
Tiens une question : en français, comment vous traduiriez "Lock Contention" ?
Dernière modification par grim7reaper (Le 21/07/2012, à 08:11)
Hors ligne
#1562 Le 21/07/2012, à 08:16
- Rolinh
Re : /* Topic des codeurs [7] */
Pas pour rien que je passe des heures à faire le moindre petit changement...
Sinon, "conflit de verrou" ou "verrouillage concurrent" ?
Hors ligne
#1563 Le 21/07/2012, à 08:24
- grim7reaper
Re : /* Topic des codeurs [7] */
Sinon, "conflit de verrou" ou "verrouillage concurrent" ?
Yep, mais "Contention" implique que ça arrive fréquemment, il faudrait qu’on retrouve cette idée dans la traduction.
Au pire je vais mettre « fréquent conflits de verrou », ça manque de vocabulaire le français parfois (ou c’est moi qui en manque à force de lire des trucs en anglais…) :-/
Dernière modification par grim7reaper (Le 21/07/2012, à 08:24)
Hors ligne
#1564 Le 21/07/2012, à 08:35
- Rolinh
Re : /* Topic des codeurs [7] */
Le français possède plus de mots que l'anglais
Et sinon, "conflits de verrous fréquents" plutôt ^^
Hors ligne
#1565 Le 21/07/2012, à 09:22
- Pylades
Re : /* Topic des codeurs [7] */
C’est surtout que tu n’as rien corrigé du tout (si problème il y a) :]
Euh, tu peux détailler ?
Parce que j’ai l’impression que je garantis que dès lors que l’on appelle stop, la fonction ne sera plus appelée, et qu’aucun autre Timer ne sera créé…
Certes, il se peut qu’un Timer survive et prolonge le Timeout d’une itération, mais il sera tout de même stoppé (d’ailleurs, il suffit de rajouter deux lignes pour corriger ça).
Dernière modification par Πυλάδης (Le 21/07/2012, à 09:26)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1566 Le 21/07/2012, à 09:42
- grim7reaper
Re : /* Topic des codeurs [7] */
Le français possède plus de mots que l'anglais
Ça dépend dans quel domaine, et là je parle d’info donc pas dans ce cas :-p
Et sinon, "conflits de verrous fréquents" plutôt ^^
Non, dans ma phrase ça sonnait mieux dans l’autre sens. Mais bon, finalement j’ai reformulé ^^
grim7reaper a écrit :C’est surtout que tu n’as rien corrigé du tout (si problème il y a) :]
Euh, tu peux détailler ?
Tu dis : « le timer n’est pas stoppé si l’appel à self._timer.cancel se fait entre l’appel à self._run et l’instanciation du nouveau threading.Timer »
Pour que ça arrive, faudrait que le timer expire, fasse donc appel à self._run, là il est interrompu, un autre thread appelle cancel sur le timer, self._run continue alors son exécution et instancie un nouveau timer : ça repart, tu n’as rien arrêté du tout (ça se trouve c’est même pas possible ça, je ne sais pas comment Python gère ses threads).
C’est ça le problème que tu soulevais et que tu veux résoudre ?
Si oui, c’est pas résolu.
Si non, j’ai pas compris ce que tu cherches à résoudre.
Parce que j’ai l’impression que je garantis que dès lors que l’on appelle stop, la fonction ne sera plus appelée, et qu’aucun autre Timer ne sera créé…
Bah on avait un super Timer qu’on pouvait arrêter et relancer à volonté, après ta modif’ on peut plus…
De mon point de vue, tu as plus pété le truc que fait une amélioration…
Dernière modification par grim7reaper (Le 21/07/2012, à 09:43)
Hors ligne
#1567 Le 21/07/2012, à 10:00
- Rolinh
Re : /* Topic des codeurs [7] */
Ça dépend dans quel domaine, et là je parle d’info donc pas dans ce cas :-p
Tu marques un point là
Pour ça (entre autre bien sûr) que, si je le peux, je ne fais jamais de rapport, document ou autre sur un sujet informatique en français.
Hors ligne
#1568 Le 21/07/2012, à 10:07
- Pylades
Re : /* Topic des codeurs [7] */
Pour que ça arrive, faudrait que le timer expire, fasse donc appel à self._run, là il est interrompu, un autre thread appelle cancel sur le timer, self._run continue alors son exécution et instancie un nouveau timer : ça repart, tu n’as rien arrêté du tout (ça se trouve c’est même pas possible ça, je ne sais pas comment Python gère ses threads).
C’est ça le problème que tu soulevais et que tu veux résoudre ?
Si oui, c’est pas résolu.
Hum, pourtant comme on met _alive à False, on est certain que l’on stoppe la succession d’appels, non ? Après, il se peut que l’on ait toujours un Timer qui reste actif, mais qui un fois expiré ne fera rien. D’ailleurs on peut même l’annuler immédiatement ainsi :
def _run(self):
if self._alive:
self._timer = Timer(self._delay, self._run)
self._timer.start()
self._target(*self._args, **self._kwargs)
if not self._alive:
self._timer.cancel()
Bah on avait un super Timer qu’on pouvait arrêter et relancer à volonté, après ta modif’ on peut plus…
De mon point de vue, tu as plus pété le truc que fait une amélioration…
Ça, c’est parce que je n’ai personnellement pas besoin de le relancer, mais si l’on veut on peut toujours déplacer le self._alive = True de __init__ vers start.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1569 Le 21/07/2012, à 10:17
- grim7reaper
Re : /* Topic des codeurs [7] */
grim7reaper a écrit :Pour que ça arrive, faudrait que le timer expire, fasse donc appel à self._run, là il est interrompu, un autre thread appelle cancel sur le timer, self._run continue alors son exécution et instancie un nouveau timer : ça repart, tu n’as rien arrêté du tout (ça se trouve c’est même pas possible ça, je ne sais pas comment Python gère ses threads).
C’est ça le problème que tu soulevais et que tu veux résoudre ?
Si oui, c’est pas résolu.Hum, pourtant comme on met _alive à False, on est certain que l’on stoppe la succession d’appels, non ?
Non (là encore, pour savoir si ce que je dis est valable il faudrait savoir comment Python gère ses threads, comment il interrompt/préempte, …)
Avec ta version, on peut avoir l'exécution suivante :
Le timer expire, il fait donc appel à self._run, exécute le if: self._alive vaut True.
Là il est interrompu, un autre thread appelle cancel sur le timer, self._alive passe à False.
self._run continue alors son exécution (il a déjà fait le test, et est donc dans la première branche) et instancie un nouveau timer : ça repart, tu n’as rien arrêté du tout.
Donc rien n’est résolu (’fin ça améliore un peu, mais ça résoud pas complétement le problème non plus).
Après, il se peut que l’on ait toujours un Timer qui reste actif, mais qui un fois expiré ne fera rien.
Pourquoi il fera rien ?
grim7reaper a écrit :Bah on avait un super Timer qu’on pouvait arrêter et relancer à volonté, après ta modif’ on peut plus…
De mon point de vue, tu as plus pété le truc que fait une amélioration…Ça, c’est parce que je n’ai personnellement pas besoin de le relancer, mais si l’on veut on peut toujours déplacer le self._alive = True de __init__ vers start.
C’est ce que je me suis dit.
Mais si tu as ce besoin, tu peux ajouter une méthode (genre disarm) au lieu de modifier celle qui existe.
Comme ça tu en a une pour stopper le timer et une autre pour le désarmer définitivement.
Dernière modification par grim7reaper (Le 21/07/2012, à 10:20)
Hors ligne
#1570 Le 21/07/2012, à 10:35
- Pylades
Re : /* Topic des codeurs [7] */
self._run continue alors son exécution (il a déjà fait le test, et est donc dans la première branche) et instancie un nouveau timer : ça repart, tu n’as rien arrêté du tout.
Certes, mais d’une part on peut annuler immédiatement après le nouveau Timer, et d’autre part :
Pourquoi il fera rien ?
Parce que dès qu’il expirera, il appellera self._run, qui comme self._alive sera à False ne fera rien.
Mais si tu as ce besoin, tu peux ajouter une méthode (genre disarm) au lieu de modifier celle qui existe.
Comme ça tu en a une pour stopper le timer et une autre pour le désarmer définitivement.
Bah, comme la méthode qui existe avait comme problème de ne potentiellement pas stopper le Timeout, c’est quand même bien de la modifier, non ? ^^
Sinon, j’ai du mal à voir l’intérêt d’une méthode disarm. Si l’on veut que le Timeout ne serve plus, il suffit de ne plus l’utiliser, non ?
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1571 Le 21/07/2012, à 10:52
- grim7reaper
Re : /* Topic des codeurs [7] */
grim7reaper a écrit :self._run continue alors son exécution (il a déjà fait le test, et est donc dans la première branche) et instancie un nouveau timer : ça repart, tu n’as rien arrêté du tout.
Certes, mais d’une part on peut annuler immédiatement après le nouveau Timer, et d’autre part :
grim7reaper a écrit :Pourquoi il fera rien ?
Parce que dès qu’il expirera, il appellera self._run, qui comme self._alive sera à False ne fera rien.
Yep, en effet.
Donc en fait ça va, ta solution est ok
Sinon, j’ai du mal à voir l’intérêt d’une méthode disarm. Si l’on veut que le Timeout ne serve plus, il suffit de ne plus l’utiliser, non ?
En effet…
Hors ligne
#1572 Le 21/07/2012, à 11:19
- Rolinh
Re : /* Topic des codeurs [7] */
Surcharge? Même pas peur:
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier )
{
return
_mise_en_forme_ (
leFormat,
lEntier );
}
Chaine
MiseEnForme (
Chaine leFormat,
double leFlottant )
{
return
_mise_en_forme_ (
leFormat,
leFlottant );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
Chaine chaine2 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
(CharPTR) chaine2.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
Chaine chaine2,
Chaine chaine3 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
(CharPTR) chaine2.c_str (),
(CharPTR) chaine3.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
Chaine chaine2,
Chaine chaine3,
Chaine chaine4 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
(CharPTR) chaine2.c_str (),
(CharPTR) chaine3.c_str (),
(CharPTR) chaine4.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
Chaine chaine2,
Chaine chaine3,
Chaine chaine4,
Chaine chaine5 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
(CharPTR) chaine2.c_str (),
(CharPTR) chaine3.c_str (),
(CharPTR) chaine4.c_str (),
(CharPTR) chaine5.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
Chaine chaine2,
Chaine chaine3,
int lEntier )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
(CharPTR) chaine2.c_str (),
(CharPTR) chaine3.c_str (),
lEntier );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine,
int lEntier1,
int lEntier2,
double leFlottant)
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine.c_str (),
lEntier1,
lEntier2,
leFlottant );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine,
int lEntier)
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine.c_str (),
lEntier );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine,
int lEntier1,
int lEntier2)
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine.c_str (),
lEntier1,
lEntier2 );
}
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier1,
int lEntier2)
{
return
_mise_en_forme_ (
leFormat,
lEntier1,
lEntier2 );
}
Chaine
MiseEnForme (
Chaine leFormat,
long lEntier)
{
return
_mise_en_forme_ (
leFormat,
lEntier );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
int lEntier,
Chaine chaine2,
Chaine chaine3 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
lEntier,
(CharPTR) chaine2.c_str (),
(CharPTR) chaine3.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier1,
int lEntier2,
double leFlottant)
{
return
_mise_en_forme_ (
leFormat,
lEntier1,
lEntier2,
leFlottant );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine1,
Chaine laChaine2,
int lEntier1,
int lEntier2,
int lEntier3,
int lEntier4)
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine1.c_str (),
(CharPTR) laChaine2.c_str (),
lEntier1,
lEntier2,
lEntier3,
lEntier4 );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine1,
Chaine laChaine2,
int lEntier1,
int lEntier2,
int lEntier3,
int lEntier4,
int lEntier5)
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine1.c_str (),
(CharPTR) laChaine2.c_str (),
lEntier1,
lEntier2,
lEntier3,
lEntier4,
lEntier5 );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine,
int lEntier1,
int lEntier2,
int lEntier3,
int lEntier4)
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine.c_str (),
lEntier1,
lEntier2,
lEntier3,
lEntier4 );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine1,
int lEntier1,
int lEntier2,
Chaine laChaine2 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine1.c_str (),
lEntier1,
lEntier2,
(CharPTR) laChaine2.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier1,
int lEntier2,
char leCaractere1,
char leCaractere2,
Chaine laChaine1,
CharPTR laChaine2,
Chaine laChaine3 )
{
return
_mise_en_forme_ (
leFormat,
lEntier1,
lEntier2,
leCaractere1,
leCaractere2,
(CharPTR) laChaine1.c_str (),
laChaine2,
(CharPTR) laChaine3.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier,
Chaine laChaine1,
Chaine laChaine2,
Chaine laChaine3 )
{
return
_mise_en_forme_ (
leFormat,
lEntier,
(CharPTR) laChaine1.c_str (),
(CharPTR) laChaine2.c_str (),
(CharPTR) laChaine3.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier,
Chaine laChaine1,
Chaine laChaine2 )
{
return
_mise_en_forme_ (
leFormat,
lEntier,
(CharPTR) laChaine1.c_str (),
(CharPTR) laChaine2.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
int lEntier,
Chaine laChaine)
{
return
_mise_en_forme_ (
leFormat,
lEntier,
(CharPTR) laChaine.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine laChaine1,
int lEntier,
Chaine laChaine2 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) laChaine1.c_str (),
lEntier,
(CharPTR) laChaine2.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
long lEntier,
Chaine laChaine)
{
return
_mise_en_forme_ (
leFormat,
lEntier,
(CharPTR) laChaine.c_str () );
}
Chaine
MiseEnForme (
Chaine leFormat,
Chaine chaine1,
Chaine chaine2,
Chaine chaine3,
int lEntier1,
int lEntier2 )
{
return
_mise_en_forme_ (
leFormat,
(CharPTR) chaine1.c_str (),
(CharPTR) chaine2.c_str (),
(CharPTR) chaine3.c_str (),
lEntier1,
lEntier2 );
}
26x donc...
Je vais finir fou...O_O
(mais je vais arrêter de vous spammer avec ça parce qu'à chaque fichier que j'ouvre, je frise la syncope et il y aurait beaucoup à dire...)
Hors ligne
#1573 Le 21/07/2012, à 11:25
- tshirtman
Re : /* Topic des codeurs [7] */
Tiens, sinon, le goto existe, en Python. Faut juste redéfinir frame.f_trace pour qu’il modifie frame.f_lineno comme nécessaire. Bon, après, faut réussir à se procurer un objet frame, ce qui n’est pas une mince affaire.
http://entrian.com/goto/
la flemme de regarder comment il l'a fait, mais il l'a fait ^^
Hors ligne
#1574 Le 21/07/2012, à 11:43
- grim7reaper
Re : /* Topic des codeurs [7] */
@Rolinh : je trouve pas les mots pour décrire ça o_o
Qui à pondu un code pareil ? Me dit pas que c’est un prof’ ?
C’est du code généré automatiquement ou quoi ? Je ne vois que ça comme explication rationnelle là…
@tshirtman : Il fait comme Πυλάδης le dit.
Dernière modification par grim7reaper (Le 21/07/2012, à 11:53)
Hors ligne
#1575 Le 21/07/2012, à 11:56
- Rolinh
Re : /* Topic des codeurs [7] */
Oui, c'est un prof qui enseigne en plus dans une autre école (EPFL) bien plus renommée que la mienne.
Et non, ce n'est pas généré automatiquement. Ne cherche pas d'explication rationnelle, je ne crois pas qu'il y en ait.
Ben si tu veux te rendre compte de l'ampleur du truc, voilà les sources. Il y a environ 50'000 lignes de code dans le genre.
Hors ligne