Posts Tagged C

Perfs : factoriser les if() au runtime grâce aux templates

Une petite bidouille que j'ai été amené à faire et qui je pense vaut le coup d'être partagée : je me suis retrouvé à devoir effectuer un même traitement sur un nombre important d'éléments (ex : on parcourt tous les pixels d'une image pour changer la luminosité...), mais je voulais pouvoir effectuer certaines parties de mon traitement de manière optionnelle, suivant certaines options de configuration. En gros, j'avais quelque chose sous la forme :

for e in elements
   if bOption1
      traitement 1
   if bOption2
      traitement 2

Ce qui est plutôt mauvais d'un point de vue performances (on fait des tests pour rien, et les sauts conditionnels c'est pas ce qu'il y a de mieux non plus).
Idéalement, je voudrais que la résolution des conditions bOption1 et bOption2 soit faite en dehors de la boucle, et que la boucle n'effectue que les traitements qui m'intéressent.

Read the rest of this entry »

, , ,

No Comments

Tutoriel Boost Graph Library

Boost, c'est le bien, et la BGL ne fait pas exception à la règle. BGL permet d'utiliser des algorithmes de graphes précodés en l'adaptant à nos besoins via les templates, et économise beaucoup de temps de développement et de debug.
C'est bien beau, mais encore faut-il que les puissants concepts utilisés pour faire fonctionner la librairie soient bien documentés. Or, la documentation de la BGL est tout simplement ignoble :
Read the rest of this entry »

, , ,

3 Comments

Préprocesseur et énumérations : la suite.

Cet article fait suite à mon premier article intitulé "Faire un peu joujou avec le préprocesseur"
(disponible ici : http://www.coder-studio.com/blog/preproc/ ).

Pour rappel, nous en sommes restés à un système de macro qui permettait d'automatiser la création
d'un opérateur "< <" pour iostream, capable d'afficher le nom d'une énumération.

Read the rest of this entry »

, , ,

2 710 Comments

Faire un peu joujou avec le préprocesseur...

Ça faisait un bail que je n'écrivais pas sur Coder-Studio...
Chose réparée :)

Du 17 au 19 avril 2009, a eu lieu la finale de Cod'INSA, un concours de programmation inter-INSA,
qui s'est déroulée à l'INSA de Toulouse (plus d'infos sur http://codinsa.insa-lyon.fr pour les intéressés).
Faisant partie des organisateurs, j'ai eu à faire l'interfaçage C++/Java (oui parce qu'il y en a qui veulent
participer en Java...allez comprendre :p [/troll]). J'y ai découvert les joies de GCJ et de CNI, ce qui
pourra peut-être être l'objet d'un autre article, selon ma motivation...

Bref, tout ça pour dire qu'il m'a fallu interfacer une librairie écrite en C avec du Java, et qu'il a fallu
automatiser un peu le boulot pour la partie concernant les énumérations.

Dans cet article, je vais illustrer une méthode pour faciliter l'affichage des valeurs des énumérations.
En gros, le but, c'est que si l'on a :

MonEnumeration e = E_VAL_1;
std::cout < < e << std::endl;

il s'affiche alors à l'écran "E_VAL_1".

Read the rest of this entry »

, ,

9 Comments

Introduction à wxWidgets

I) Présentation

wxWidgets est une librairie open source dont le but 1er est de permettre de créer des interfaces graphiques pour ses programmes (fenêtres, boutons...etc). Elle est portable mais les applications crées avec ont la particularité d'adopter le "look and feel" (apparence) de la plate-forme sur laquelle elles ont été compilées. Cela est dû au fait qu'en interne, wxWidgets utilise l'API propre à chaque plate-forme (API Win32 ou juste GDI sous Windows, GTK+, Motif ou directement X11 sous Linux et autres UNIXs, Carbon ou Cocoa sous Mac...). Cependant, l'équipe de wxWidgets a également mis sur pied une version spéciale de wxWidgets, wxUniversal, qui compile sous Windows, Linux et certains périphériques embarqués, et qui s'occupe entièrement de l'affichage (le "look and feel" natif de la plate-forme n'est pas forcément respecté).

Cependant, wxWidgets ne se limite pas à permettre la création d'interfaces graphiques, elle est capable de faire beaucoup d'autres choses; elle possède ses propres classes de tableau, tables de haschage, liste chaînée, elle permet de créer des applications utilisant les sockets (connections réseau), d'intégrer une zone dédiée à OpenGL dans une fenêtre pour pouvoir faire du dessin en 3D, de faire des manipulations de chaînes grâce à la classe wxString, contient une sous-librairie, wxHTML, qui permet de visualiser une page HTML, possède son propre système d'aide semblable aux CHM de Windows, peut utiliser des ressources au format XML, peut utiliser des bases de données...etc.

Et tout cela est gratuit et portable, pourquoi s'en priver ? ;)

Read the rest of this entry »

,

2 213 Comments

Les Bases du langage C

Introduction

Je suppose que si vous êtes arrivé jusqu'à cette page web, soit vous vous êtes perdu soit vous voulez vraiment apprendre à programmer en langage C ^^. Si vous êtes dans ce cas, bienvenue chez les programmeurs ! Alors, qu'est-ce que le C ? Le C est un langage de programmation; on écrit un programme dans ce langage, et ensuite le texte que vous avez tapé est converti par un "compilateur" en langage binaire 0 et 1 compréhensible par le processeur de votre ordinateur (un fichier .exe). Donc, pour commencer, il vous faut un compilateur et un éditeur (le bloc-notes peut suffire comme éditeur mais il y a beaucoup mieux ;) ). Un environnement qui intègre et compilateur et éditeur est appelé IDE (Integrated Development Environment). La plupart de ceux que je vais vous proposer sont des compilateurs C++. Qu'est-ce que le C++? C'est un autre langage, mais qui en réalité est compatible avec le C (un programme écrit en C peut se compiler avec un compilateur C++ mais pas l'inverse). Le C++, c'est donc tout le C, mais avec des notions supplémentaires (templates, objets, surcharge de fonctions...). Le C et le C++ sont définis par les normes ANSI/ISO (ce sont des organismes de normalisation, en gros ils donnent les règles que doit respecter un compilateur pour pouvoir être présenté comme un compilateur C ANSI ou C++ ANSI).

Read the rest of this entry »

, , ,

1 382 Comments

La factory

La Factory, brrr

Dans ce tutorial, je vais tenter d'aborder le design pattern factory (fabrique pour les anglophobes).
A mon habitude, nous allons retrouver la même ligne directrice que pour les précédents tutoriaux.
Je vais commencer par expliquer brièvement le principe de la factory, ensuite en découlera une première implémentation en C++ et enfin on essayera de rendre ça le plus générique possible.

Read the rest of this entry »

, ,

1 Comment