2010-11-09 32 views
0

Étant donné:Attribution d'un nom à une classe de tampon cyclique pour des échantillons temporisés?

class Buf { 
    // has fixed buffer size, forming a cyclic buffer tor t->v pairs 
    void add(time_type t, value_type v); // adds value v at time t, overwriting the oldest buffered value 
    value_type get(time_type t); // returns the value at time t1 for t1 <= t < t2 (for t1 and t2 datapoints in the buffer) 
    ... 
}; 

Que voulez-vous appeler cette classe? Je reconnais que c'est subjectif, mais cela ne devrait pas conduire à une discussion approfondie des réponses, et j'espère que c'est OK. :-)


Jusqu'à présent, je pense à RecentValueBuffer depuis les cartes de classe (récentes) horodatages à des valeurs correspondant à ces horodateurs. Je suis un peu incertain à propos de "récent" parce que cela semble impliquer un court laps de temps/nombre d'échantillons.

Répondre

3

Vous devez vous demander si l'utilisateur de la classe doit savoir ou se soucier que l'implémentation interne est un tampon circulaire. Si ce n'est pas le cas, nommez-le quelque chose qui indique clairement quel est le but de la classe: peut-être quelque chose comme TimeMap car il semble que les valeurs de mapping soient des points discrets dans le temps. Ensuite, vous pouvez toujours changer l'implémentation interne en quelque chose d'autre (disons, une Hashtable) sans changer le nom de votre classe.

S'il est important pour la sémantique qu'il s'agisse toujours d'un tampon circulaire, envisagez d'en faire un conteneur générique CircularBuffer ou similaire et utilisez des modèles pour définir les types de clés et de valeurs.

0

CircularBuffer or RingBuffer

j'ai écrit un récemment pour maintenir une moyenne mobile (appelé RunningAverage), et renvoyé à lui mes commentaires comme un « tampon circulaire », donc je apparemment, c'est ma préférence. :) Probablement parce que c'est plus court.

1

Une combinaison de quelques aspects significatifs de son but et la conception:

  • Fixed_Sized
  • FIFO
  • circulaire
  • Tampon
  • récente
  • Last_N
  • Time_Window

Choisissez-en un ou combinez-en autant que vous le souhaitez jusqu'à ce que vous soyez satisfait du résultat.

0

Vous pouvez utiliser le code boost::circular_buffer conforme à la norme STL ici plutôt que de lancer votre propre version de cette structure.

+0

Merci d'avoir signalé cela! Je vais aller avec un 'vecteur' sous-jacent, car cela semble moins complexe et j'ai besoin d'enrouler le tampon circulaire de toute façon pour implémenter la fonction' get'. (Moins complexe: pensez à l'invalidation de l'itérateur, etc.) –