Bonjour,

Dans un soft que je developpe actuellement, j'ai une section de code qui doit pouvoir s'excuter le plus rapidement possible.

Il s'agit d'un sequenceur musical.

Dans mon architecture, il y a un objet cSequencer qui contient :
- un buffer avec les evenements � traiter
- les parametres de timing
- un vecteur de "patterns" qui sont en cours de lecture, qui contient un vecteur des diff�rentes pistes de ce pattern
- une fonction appell�e tr�s souvent qui sert � calculer le contenu du buffer.

Voici mon code (� peu pr�s, je passe les d�tails)

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
class cSequencer
{
    void *buffer;
    int  paramTiming1;
    int  paramTiming2;
    int  paramTiming3;
    std::vector<cPattern*> vPatterns;
 
    void remplirBuffer();
}
 
class cPattern
{
    std::vector<cPiste*> vPistes;
    cSequencer *sequencer;           // pointeur vers le sequenceur
    void remplirBuffer();
}
 
class cPiste
{
    cPattern *pattern;           // pointeur vers le pattern
    void remplirBuffer();
}
Actuellement, j'ai ceci comme impl�mentation :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
void cSequencer::remplirBuffer()
{
    std::vector<cPattern*>::const_iterator It;
    for(It=vPatterns.begin();It!=vPatterns.end();It++)
        (*It)->remplirBuffer();
}
 
void cPattern::remplirBuffer()
{
    std::vector<cPiste*>::const_iterator It;
    for(It=vPistes.begin();It!=vPistes.end();It++)
        (*It)->remplirBuffer();
}
 
void cPiste::remplirBuffer()
{
    // On calcule le contenu du buffer, en utilisant les infos de timing :
 
    pattern->sequencer->paramTiming1;
    pattern->sequencer->paramTiming2;
    pattern->sequencer->paramTiming3;
 
    // Et on remplit le buffer situé à l'adresse pointée par :
    pattern->sequencer->buffer;
}

Questions :
-----------

1/ Est-il plus efficace de passer les variables paramTiming1,paramTiming2,paramTiming3,*buffer � chaque fonction remplirBuffer ou est-ce plus rapide de r�cuperer ces valeurs par pointeur comme je le fait actuellement ?

2/ Quel conteneur STL est le plus rapide pour parcourir toute sa liste par un it�rateur ?

Merci !