Skip to content

Commit f24f375

Browse files
author
Andrey Ovsiankin
committed
Рефакторинг коллекций и пустых значений
1 parent 1bcd1b0 commit f24f375

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+254
-314
lines changed

src/Component/SimpleCollection.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ This Source Code Form is subject to the terms of the
1515
namespace Component
1616
{
1717
[ContextClass("ПростоКоллекция")]
18-
public sealed class SimpleCollection : AutoContext<SimpleCollection>, ICollectionContext, IEnumerable<SimpleClass>
18+
public sealed class SimpleCollection : AutoCollectionContext<SimpleCollection, SimpleClass>
1919
{
2020
private readonly List<SimpleClass> _data = new List<SimpleClass>();
2121

@@ -32,24 +32,15 @@ public static IRuntimeContextInstance Constructor()
3232
}
3333

3434
[ContextMethod("Количество")]
35-
public int Count()
35+
public override int Count()
3636
{
3737
return _data.Count;
3838
}
3939

40-
public CollectionEnumerator GetManagedIterator()
41-
{
42-
return new CollectionEnumerator(GetEnumerator());
43-
}
44-
45-
public IEnumerator<SimpleClass> GetEnumerator()
40+
public override IEnumerator<SimpleClass> GetEnumerator()
4641
{
4742
return ((IEnumerable<SimpleClass>) _data).GetEnumerator();
4843
}
4944

50-
IEnumerator IEnumerable.GetEnumerator()
51-
{
52-
return ((IEnumerable<SimpleClass>) _data).GetEnumerator();
53-
}
5445
}
5546
}

src/OneScript.Core.Tests/ValuesTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ This Source Code Form is subject to the terms of the
55
at http://mozilla.org/MPL/2.0/.
66
----------------------------------------------------------*/
77
using System;
8+
using System.Collections.Generic;
89
using Moq;
910
using OneScript.Commons;
1011
using OneScript.StandardLibrary;
@@ -260,5 +261,40 @@ public void TypeEqualityOnCreationTest()
260261
Assert.Equal(manualGuid.SystemType, autoGuid.SystemType);
261262

262263
}
264+
265+
public static IEnumerable<object[]> FilledValues => new []
266+
{
267+
new object[] { ValueFactory.Create(1) },
268+
new object[] { ValueFactory.Create("hello") },
269+
new object[] { ValueFactory.Create(DateTime.Now) },
270+
new object[] { ValueFactory.Create(true) },
271+
new object[] { ValueFactory.Create(false) },
272+
new object[] { new GuidWrapper() }
273+
};
274+
275+
public static IEnumerable<object[]> EmptyValues => new []
276+
{
277+
new object[] { ValueFactory.Create(0) },
278+
new object[] { ValueFactory.Create()},
279+
new object[] { ValueFactory.Create(DateTime.MinValue)},
280+
new object[] { ValueFactory.CreateNullValue()},
281+
new object[] { new GuidWrapper(Guid.Empty.ToString())}
282+
};
283+
284+
[Theory]
285+
[MemberData(nameof(FilledValues))]
286+
public void ValueFilledTest(IValue value)
287+
{
288+
var globCtx = new StandardGlobalContext();
289+
Assert.True(globCtx.ValueIsFilled(value));
290+
}
291+
292+
[Theory]
293+
[MemberData(nameof(EmptyValues))]
294+
public void ValueEmptyTest(IValue value)
295+
{
296+
var globCtx = new StandardGlobalContext();
297+
Assert.False(globCtx.ValueIsFilled(value));
298+
}
263299
}
264300
}

src/OneScript.DebugProtocol.Test/DebugVariablesTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private IValue GetInstance(Type valueType, IValue[] args)
4444
var factory = Manager.GetFactoryFor(registeredType);
4545
return factory.Activate(new TypeActivationContext
4646
{
47-
TypeManager = Manager,
47+
MachineEnvironment = new MachineEnvironment(Manager, default, default),
4848
TypeName = registeredType.Name
4949
},args);
5050
}

src/OneScript.StandardLibrary/Binary/BinaryDataBuffer.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace OneScript.StandardLibrary.Binary
2323
/// Порядок байтов, заданный для объекта ЧтениеДанных, будет использован во всех объектах, полученных на его основании.
2424
/// </summary>
2525
[ContextClass("БуферДвоичныхДанных", "BinaryDataBuffer")]
26-
public class BinaryDataBuffer : AutoContext<BinaryDataBuffer>, ICollectionContext
26+
public class BinaryDataBuffer : AutoCollectionContext<BinaryDataBuffer, IValue>
2727
{
2828
private bool _readOnly;
2929
private readonly byte[] _buffer;
@@ -616,17 +616,12 @@ public void SetReadOnly()
616616
_readOnly = true;
617617
}
618618

619-
public int Count()
619+
public override int Count()
620620
{
621621
return _buffer.Length;
622622
}
623623

624-
public CollectionEnumerator GetManagedIterator()
625-
{
626-
return new CollectionEnumerator(GetEnumerator());
627-
}
628-
629-
private IEnumerator<IValue> GetEnumerator()
624+
public override IEnumerator<IValue> GetEnumerator()
630625
{
631626
for (long i = 0; i < _buffer.LongLength; i++)
632627
{

src/OneScript.StandardLibrary/Collections/ArrayImpl.cs

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ This Source Code Form is subject to the terms of the
1313
namespace OneScript.StandardLibrary.Collections
1414
{
1515
[ContextClass("Массив", "Array")]
16-
public class ArrayImpl : AutoContext<ArrayImpl>, ICollectionContext, IEnumerable<IValue>
16+
public class ArrayImpl : AutoCollectionContext<ArrayImpl, IValue>
1717
{
1818
private readonly List<IValue> _values;
1919

@@ -54,7 +54,7 @@ public override void SetIndexedValue(IValue index, IValue val)
5454
#region ICollectionContext Members
5555

5656
[ContextMethod("Количество", "Count")]
57-
public int Count()
57+
public override int Count()
5858
{
5959
return _values.Count;
6060
}
@@ -65,16 +65,11 @@ public void Clear()
6565
_values.Clear();
6666
}
6767

68-
public CollectionEnumerator GetManagedIterator()
69-
{
70-
return new CollectionEnumerator(GetEnumerator());
71-
}
72-
7368
#endregion
7469

7570
#region IEnumerable<IRuntimeContextInstance> Members
7671

77-
public IEnumerator<IValue> GetEnumerator()
72+
public override IEnumerator<IValue> GetEnumerator()
7873
{
7974
foreach (var item in _values)
8075
{
@@ -84,15 +79,6 @@ public IEnumerator<IValue> GetEnumerator()
8479

8580
#endregion
8681

87-
#region IEnumerable Members
88-
89-
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
90-
{
91-
return GetEnumerator();
92-
}
93-
94-
#endregion
95-
9682
[ContextMethod("Добавить", "Add")]
9783
public void Add(IValue value = null)
9884
{

src/OneScript.StandardLibrary/Collections/FixedArrayImpl.cs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ This Source Code Form is subject to the terms of the
99
using System.Collections.Generic;
1010
using ScriptEngine.Machine;
1111
using ScriptEngine.Machine.Contexts;
12+
using ScriptEngine.Machine.Values;
1213

1314
namespace OneScript.StandardLibrary.Collections
1415
{
1516
[ContextClass("ФиксированныйМассив", "FixedArray")]
16-
public class FixedArrayImpl : AutoContext<FixedArrayImpl>, ICollectionContext, IEnumerable<IValue>
17+
public class FixedArrayImpl : AutoCollectionContext<FixedArrayImpl, IValue>
1718
{
1819
private readonly ArrayImpl _array;
1920

@@ -47,35 +48,18 @@ public override void SetIndexedValue(IValue index, IValue val)
4748
#region ICollectionContext Members
4849

4950
[ContextMethod("Количество", "Count")]
50-
public int Count()
51+
public override int Count()
5152
{
5253
return _array.Count();
5354
}
5455

55-
public CollectionEnumerator GetManagedIterator()
56-
{
57-
return new CollectionEnumerator(GetEnumerator());
58-
}
59-
60-
#endregion
61-
62-
#region IEnumerable<IRuntimeContextInstance> Members
63-
64-
public IEnumerator<IValue> GetEnumerator()
56+
public override IEnumerator<IValue> GetEnumerator()
6557
{
6658
return _array.GetEnumerator();
6759
}
6860

6961
#endregion
7062

71-
#region IEnumerable Members
72-
73-
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
74-
{
75-
return GetEnumerator();
76-
}
77-
78-
#endregion
7963

8064
[ContextMethod("Найти", "Find")]
8165
public IValue Find(IValue what)

src/OneScript.StandardLibrary/Collections/FixedMapImpl.cs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ This Source Code Form is subject to the terms of the
88
using System.Collections.Generic;
99
using ScriptEngine.Machine;
1010
using ScriptEngine.Machine.Contexts;
11+
using ScriptEngine.Machine.Values;
1112

1213
namespace OneScript.StandardLibrary.Collections
1314
{
1415
[ContextClass("ФиксированноеСоответствие", "FixedMap")]
15-
public class FixedMapImpl : AutoContext<FixedMapImpl>, ICollectionContext, IEnumerable<KeyAndValueImpl>
16+
public class FixedMapImpl : AutoCollectionContext<FixedMapImpl, KeyAndValueImpl>
1617
{
1718

1819
private readonly MapImpl _map;
@@ -66,34 +67,21 @@ public IValue Retrieve(IValue key)
6667
}
6768

6869
[ContextMethod("Количество", "Count")]
69-
public int Count()
70+
public override int Count()
7071
{
7172
return _map.Count();
7273
}
7374

74-
public CollectionEnumerator GetManagedIterator()
75+
public override CollectionEnumerator GetManagedIterator()
7576
{
7677
return _map.GetManagedIterator();
7778
}
7879

79-
#endregion
80-
81-
#region IEnumerable<IValue> Members
82-
83-
public IEnumerator<KeyAndValueImpl> GetEnumerator()
80+
public override IEnumerator<KeyAndValueImpl> GetEnumerator()
8481
{
8582
return _map.GetEnumerator();
8683
}
87-
88-
#endregion
89-
90-
#region IEnumerable Members
91-
92-
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
93-
{
94-
return GetEnumerator();
95-
}
96-
84+
9785
#endregion
9886

9987
[ScriptConstructor(Name = "Из соответствия")]

src/OneScript.StandardLibrary/Collections/FixedStructureImpl.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ This Source Code Form is subject to the terms of the
88
using System.Collections.Generic;
99
using ScriptEngine.Machine;
1010
using ScriptEngine.Machine.Contexts;
11+
using ScriptEngine.Machine.Values;
1112

1213
namespace OneScript.StandardLibrary.Collections
1314
{
@@ -120,6 +121,8 @@ public CollectionEnumerator GetManagedIterator()
120121
return new CollectionEnumerator(_structure.GetManagedIterator());
121122
}
122123

124+
bool IEmptyValueCheck.IsEmpty => Count() == 0;
125+
123126
#endregion
124127

125128
#region IEnumerable<IValue> Members

src/OneScript.StandardLibrary/Collections/MapImpl.cs

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ This Source Code Form is subject to the terms of the
1212
namespace OneScript.StandardLibrary.Collections
1313
{
1414
[ContextClass("Соответствие", "Map")]
15-
public class MapImpl : AutoContext<MapImpl>, ICollectionContext, IEnumerable<KeyAndValueImpl>
15+
public class MapImpl : AutoCollectionContext<MapImpl, KeyAndValueImpl>
1616
{
1717
private readonly Dictionary<IValue, IValue> _content = new Dictionary<IValue, IValue>(new GenericIValueComparer());
1818

@@ -85,7 +85,7 @@ public IValue Retrieve(IValue key)
8585
}
8686

8787
[ContextMethod("Количество", "Count")]
88-
public int Count()
88+
public override int Count()
8989
{
9090
return _content.Count;
9191
}
@@ -101,17 +101,11 @@ public void Delete(IValue key)
101101
{
102102
_content.Remove(key);
103103
}
104-
105-
public CollectionEnumerator GetManagedIterator()
106-
{
107-
return new CollectionEnumerator(GetEnumerator());
108-
}
109-
110104
#endregion
111105

112106
#region IEnumerable<IValue> Members
113107

114-
public IEnumerator<KeyAndValueImpl> GetEnumerator()
108+
public override IEnumerator<KeyAndValueImpl> GetEnumerator()
115109
{
116110
foreach (var item in _content)
117111
{
@@ -121,15 +115,6 @@ public IEnumerator<KeyAndValueImpl> GetEnumerator()
121115

122116
#endregion
123117

124-
#region IEnumerable Members
125-
126-
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
127-
{
128-
return GetEnumerator();
129-
}
130-
131-
#endregion
132-
133118
[ScriptConstructor]
134119
public static MapImpl Constructor()
135120
{

src/OneScript.StandardLibrary/Collections/StructureImpl.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ This Source Code Form is subject to the terms of the
99
using ScriptEngine;
1010
using ScriptEngine.Machine;
1111
using ScriptEngine.Machine.Contexts;
12+
using ScriptEngine.Machine.Values;
1213

1314
namespace OneScript.StandardLibrary.Collections
1415
{
@@ -195,6 +196,8 @@ public CollectionEnumerator GetManagedIterator()
195196
return new CollectionEnumerator(GetEnumerator());
196197
}
197198

199+
bool IEmptyValueCheck.IsEmpty => Count() == 0;
200+
198201
#endregion
199202

200203
#region IEnumerable<IValue> Members

0 commit comments

Comments
 (0)