/// Classe représentant un code, composé des jetons et méthodes
/// Représente un code composé de jetons.
/// </summary>
/// </summary>
publicclassCode
publicclassCode
{
{
privatereadonlyJeton?[]lesJetons;
privatereadonlyJeton?[]lesJetons;
/// <summary>
/// Obtenir le nombre de jetons dans le code.
/// </summary>
publicintNbJetons{get;privateset;}=0;
publicintNbJetons{get;privateset;}=0;
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Code"/> avec la longueur de code spécifiée.
/// </summary>
/// <param name="tailleCode">La longueur du code.</param>
/// <exception cref="TailleCodeException">Levée lorsque la longueur du code spécifiée est inférieure ou égale à zéro.</exception>
publicCode(inttailleCode)
publicCode(inttailleCode)
{
{
if(tailleCode<=0)
if(tailleCode<=0)
@ -22,9 +29,14 @@ namespace CoreLibrary
lesJetons=newJeton?[tailleCode];
lesJetons=newJeton?[tailleCode];
}
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Code"/> avec les jetons spécifiés.
/// </summary>
/// <param name="jetons">Les jetons pour initaliser le code.</param>
/// <exception cref="TailleCodeException">Levée lorsque la collection de jetons spécifiée est vide.</exception>
publicCode(IEnumerable<Jeton>jetons)
publicCode(IEnumerable<Jeton>jetons)
{
{
if(jetons.Any())
if(!jetons.Any())
{
{
thrownewTailleCodeException(jetons.Count());
thrownewTailleCodeException(jetons.Count());
}
}
@ -36,6 +48,11 @@ namespace CoreLibrary
}
}
}
}
/// <summary>
/// Ajoute un jeton au code.
/// </summary>
/// <param name="jeton">Le jeton à ajouter</param>
/// <exception cref="CodeCompletException">Levée lorsque le code est plein.</exception>
publicvoidAjouterJeton(Jetonjeton)
publicvoidAjouterJeton(Jetonjeton)
{
{
if(NbJetons==TailleMaximale())
if(NbJetons==TailleMaximale())
@ -46,6 +63,10 @@ namespace CoreLibrary
lesJetons[NbJetons++]=jeton;
lesJetons[NbJetons++]=jeton;
}
}
/// <summary>
/// Supprime le dernier jeton ajouté au code.
/// </summary>
/// <exception cref="CodeVideException">Levée lorsque le code est vide.</exception>
publicvoidSupprimerDernierJeton()
publicvoidSupprimerDernierJeton()
{
{
if(NbJetons==0)
if(NbJetons==0)
@ -56,9 +77,15 @@ namespace CoreLibrary
lesJetons[--NbJetons]=null;
lesJetons[--NbJetons]=null;
}
}
/// <summary>
/// Récupère le jeton à l'indice spécifié dans le code.
/// </summary>
/// <param name="indice">L'indice du jeton a récupéré.</param>
/// <returns>Le jeton situé à l'indice spécifié.</returns>
/// <exception cref="IndiceCodeException">Levée lorsque l'indice est supérieur à la taille maximale du code, inférieur à 0 ou qu'il n'y a pas de jeton à l'indice spécifié</exception>
publicJetonRecupererJeton(intindice)
publicJetonRecupererJeton(intindice)
{
{
if(indice<0||indice>TailleMaximale())
if(indice<0||indice>=TailleMaximale())
thrownewIndiceCodeException(indice,NbJetons-1);
thrownewIndiceCodeException(indice,NbJetons-1);
Jeton?jeton=lesJetons[indice];
Jeton?jeton=lesJetons[indice];
@ -69,28 +96,47 @@ namespace CoreLibrary
returnjeton.Value;
returnjeton.Value;
}
}
/// <summary>
/// Récupère une énumération des jetons dans le code.
/// </summary>
/// <returns>Enumération des jetons du code</returns>
publicIEnumerable<Jeton?>Jetons()
publicIEnumerable<Jeton?>Jetons()
{
{
returnlesJetons;
returnlesJetons;
}
}
/// <summary>
/// Vérifie si le code est complet.
/// </summary>
/// <returns>True si le code est complet, sinon False.</returns>
publicboolEstComplet()
publicboolEstComplet()
{
{
returnNbJetons==lesJetons.Length;
returnNbJetons==lesJetons.Length;
}
}
/// <summary>
/// Recupère la taille maximal du code.
/// </summary>
/// <returns>Taille maximal du code.</returns>
publicintTailleMaximale()
publicintTailleMaximale()
{
{
returnlesJetons.Length;
returnlesJetons.Length;
}
}
/// <summary>
/// Compare le code avec un autre code et génère des indcateurs de correspondance.
/// </summary>
/// <param name="autreCode">Le code à comparer avec le code actuel</param>
/// <returns>Enumération d'indicateurs de correspondance entre les deux codes.</returns>