LibiadaMusic.ScoreModel.CongenericScoreTrack.MeasureOrder C# (CSharp) Method

MeasureOrder() public method

The measure order. возвращает строй объектов Measure, проидентифицировав их
public MeasureOrder ( ) : List
return List
        public List<Measure> MeasureOrder()
        {
            var temp = new List<Measure>();

            // запись в одну цепочку
            foreach (Measure measure in MeasureList)
            {
                temp.Add((Measure)measure.Clone());
            }

            // идентификация
            // первый такт обозначается 0
            temp[0].Id = 0;

            // счетчик для уникальных
            int n = 1;

            // для остальных процедура цикла
            for (int i = 1; i < temp.Count; i++)
            {
                // флаг если уже идентифицирован такт
                bool identified = false;

                for (int j = 0; j < i; j++)
                {
                    if (temp[i].Equals(temp[j]))
                    {
                        // еси уже такой идентифицировался
                        temp[i].Id = temp[j].Id;
                        identified = true;
                    }
                }

                // если ранее не встречался этот такт, то назначим ему новый id
                if (!identified)
                {
                    // назанчим еще не использованный по возрастанию id
                    temp[i].Id = n;

                    // увеличиваем счетчик уникальных
                    n++;
                }
            }

            return temp;
        }

Usage Example

        public void MeasureOrderTest()
        {
            // создание и заполнения списка(ов) нот для такта(ов) монотрека
            var notes = new List<ValueNote>
            {
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1)
            };

            var notes3 = new List<ValueNote>
            {
                new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1)
            };

            var notes2 = new List<ValueNote>
            {
                new ValueNote(new Pitch(3, 'B', 0), new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'E', 0), new Duration(1, 4, false, 512), false, Tie.None, 0),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 16, false, 128), false, Tie.None, 1)
            };

            var notes4 = new List<ValueNote>
            {
                new ValueNote(new Pitch(3, 'A', -1), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'D', 0), new Duration(1, 4, false, 128), false, Tie.None, 2),
                new ValueNote(new Pitch(3, 'A', 2), new Duration(1, 16, false, 128), false, Tie.None, 3),
                new ValueNote(new Pitch(3, 'C', 1), new Duration(1, 4, false, 128), false, Tie.None, 1)
            };

            var notes5 = new List<ValueNote>
            {
                new ValueNote((Pitch)null, new Duration(1, 4, false, 128), false, Tie.None, 1),
                new ValueNote((Pitch)null, new Duration(1, 4, false, 128), false, Tie.None, 1)
            };

            var notes6 = new List<ValueNote>
            {
                new ValueNote((Pitch)null, new Duration(1, 16, false, 128), false, Tie.None, 1),
                new ValueNote((Pitch)null, new Duration(1, 16, false, 128), false, Tie.None, 1)
            };

            var attr = new Attributes(new Size(4, 4, 128), new Key(5));

            var m1 = new Measure(notes, attr);
            var m2 = new Measure(notes2, attr);
            var m3 = new Measure(notes3, attr);
            var m4 = new Measure(notes4, attr);
            var m5 = new Measure(notes5, attr);
            var m6 = new Measure(notes6, attr);

            var measuresList = new List<Measure> { m1, m2, m3, m4, m5, m5, m2, m3, m6 };

            var uni = new CongenericScoreTrack("a1", measuresList);

            Assert.AreEqual(uni.MeasureOrder()[0].Id, 0);
            Assert.AreEqual(uni.MeasureOrder()[1].Id, 1);
            Assert.AreEqual(uni.MeasureOrder()[2].Id, 0);
            Assert.AreEqual(uni.MeasureOrder()[3].Id, 2);
            Assert.AreEqual(uni.MeasureOrder()[4].Id, 3);
            Assert.AreEqual(uni.MeasureOrder()[5].Id, 3);
            Assert.AreEqual(uni.MeasureOrder()[6].Id, 1);
            Assert.AreEqual(uni.MeasureOrder()[7].Id, 0);
            Assert.AreEqual(uni.MeasureOrder()[8].Id, 4);

            Assert.AreEqual(uni.MeasureIdOrder()[0], 0);
            Assert.AreEqual(uni.MeasureIdOrder()[1], 1);
            Assert.AreEqual(uni.MeasureIdOrder()[2], 0);
            Assert.AreEqual(uni.MeasureIdOrder()[3], 2);
            Assert.AreEqual(uni.MeasureIdOrder()[4], 3);
            Assert.AreEqual(uni.MeasureIdOrder()[5], 3);
            Assert.AreEqual(uni.MeasureIdOrder()[6], 1);
            Assert.AreEqual(uni.MeasureIdOrder()[7], 0);
            Assert.AreEqual(uni.MeasureIdOrder()[8], 4);
        }