Skip to content

Commit 639e70a

Browse files
author
Vyacheslav
committed
feat, fix, feat:
Helper tests: + Test Size #14 + Test Offset #14 + Test SetFromRoot #14 + Test SetFromValue #14 + Test Copy #14 + Test CopyToValueOut #14 + Test CopyToValueRef #14 + Test CopyToPtr #14 + Test CommonHelper.IsNull #46 fix: fill type feat: add SetCompositeValue from value
1 parent 433f008 commit 639e70a

File tree

7 files changed

+374
-76
lines changed

7 files changed

+374
-76
lines changed

Src/StackMemoryCollections/GenerateHelpers.cs

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ in StringBuilder builder
5656
else
5757
{
5858
GenerateGetСompositeValue(in builder, in memberInfo, in currentType, in offsetStr);
59+
GenerateSetСompositeValueFromRoot(in builder, in memberInfo, in currentType, in offsetStr);
5960
GenerateSetСompositeValueFrom(in builder, in memberInfo, in currentType, in offsetStr);
6061
}
6162
}
@@ -108,7 +109,7 @@ in TypeInfo typeInfo
108109
if(memberInfo.IsRuntimeOffsetCalculated)
109110
{
110111
builder.Append($@"
111-
public static readonly nuint {memberInfo.MemberName}Offset = {memberInfo.OffsetStr};
112+
public static readonly nuint {memberInfo.MemberName}Offset = (nuint){memberInfo.OffsetStr};
112113
");
113114
}
114115
}
@@ -291,61 +292,80 @@ in string offsetStr
291292
}
292293
}
293294

294-
private void GenerateSetСompositeValueFrom(
295+
private void GenerateSetСompositeValueFromRoot(
295296
in StringBuilder builder,
296297
in MemberInfo memberInfo,
297298
in INamedTypeSymbol currentType,
298299
in string offsetStr
299300
)
300301
{
301-
if(memberInfo.IsValueType)
302-
{
303-
builder.Append($@"
302+
builder.Append($@"
304303
public static void Set{memberInfo.MemberName}Value(in void* ptr, in {currentType.Name} value)
305304
{{
306305
");
307-
if (!currentType.IsValueType)
308-
{
309-
builder.Append($@"
306+
if (!currentType.IsValueType)
307+
{
308+
builder.Append($@"
310309
if(*((byte*)ptr) == 0)
311310
{{
312311
throw new NullReferenceException(""ptr is null value"");
313312
}}
314313
");
315-
}
314+
}
316315

316+
if (!memberInfo.IsValueType)
317+
{
317318
builder.Append($@"
319+
if(value.{memberInfo.MemberName} == null)
320+
{{
321+
*((byte*)ptr + {offsetStr}) = 0;
322+
return;
323+
}}
324+
");
325+
}
326+
327+
builder.Append($@"
318328
{memberInfo.TypeName}Helper.CopyToPtr(value.{memberInfo.MemberName}, (byte*)ptr + {offsetStr});
319329
}}
320330
");
321-
}
322-
else
323-
{
324-
builder.Append($@"
325-
public static void Set{memberInfo.MemberName}Value(in void* ptr, in {currentType.Name} value)
331+
}
332+
333+
private void GenerateSetСompositeValueFrom(
334+
in StringBuilder builder,
335+
in MemberInfo memberInfo,
336+
in INamedTypeSymbol currentType,
337+
in string offsetStr
338+
)
339+
{
340+
builder.Append($@"
341+
public static void Set{memberInfo.MemberName}Value(in void* ptr, in {memberInfo.MemberName} value)
326342
{{
327343
");
328-
if (!currentType.IsValueType)
329-
{
330-
builder.Append($@"
344+
if (!currentType.IsValueType)
345+
{
346+
builder.Append($@"
331347
if(*((byte*)ptr) == 0)
332348
{{
333349
throw new NullReferenceException(""ptr is null value"");
334350
}}
335351
");
336-
}
352+
}
337353

354+
if (!memberInfo.IsValueType)
355+
{
338356
builder.Append($@"
339-
if(value.{memberInfo.MemberName} == null)
357+
if(value == null)
340358
{{
341359
*((byte*)ptr + {offsetStr}) = 0;
342360
return;
343361
}}
344-
345-
{memberInfo.TypeName}Helper.CopyToPtr(value.{memberInfo.MemberName}, (byte*)ptr + {offsetStr});
346-
}}
347362
");
348363
}
364+
365+
builder.Append($@"
366+
{memberInfo.TypeName}Helper.CopyToPtr(in value, (byte*)ptr + {offsetStr});
367+
}}
368+
");
349369
}
350370

351371
private void GenerateCopyToPtr(

Src/StackMemoryCollections/TypeInfoHelper.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ in Dictionary<string, TypeInfo> typeInfos
3535

3636
if(!typeInfos.TryGetValue(member.TypeName, out var memberTypeInfo))
3737
{
38-
throw new Exception($"Type information not found, types filling error. Type name: {member.TypeName}");
38+
throw new Exception($"{nameof(CalculateSize)}: Member Type information not found(for type '{typeInfo.TypeName}'), types filling error. Type name: {member.TypeName}");
3939
}
4040

4141
typeInfo.AllPointersCount += memberTypeInfo.AllPointersCount;
@@ -80,11 +80,12 @@ in Dictionary<string, TypeInfo> typeInfos
8080
if(member.AsPointer)
8181
{
8282
pointersCount++;
83+
continue;
8384
}
8485

8586
if (!typeInfos.TryGetValue(member.TypeName, out var memberTypeInfo))
8687
{
87-
throw new Exception($"Type information not found, types filling error. Type name: {member.TypeName}");
88+
throw new Exception($"{nameof(CalculateOffset)}: Member Type information not found(for type '{containTypeInfo.TypeName}'), types filling error. Type name: {member.TypeName}");
8889
}
8990

9091
newMember.Offset += memberTypeInfo.Size;

Src/Tests/CommonHelperFixture.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using NUnit.Framework;
2+
using System;
3+
4+
namespace Tests
5+
{
6+
[TestFixture]
7+
public class CommonHelperFixture
8+
{
9+
[Test]
10+
public void CopyTest()
11+
{
12+
unsafe
13+
{
14+
byte byteVal = 0;
15+
byte* bytePtr = &byteVal;
16+
Assert.That(StackMemoryCollections.CommonHelper.IsNull(bytePtr), Is.EqualTo(true));
17+
byteVal = 1;
18+
Assert.That(StackMemoryCollections.CommonHelper.IsNull(bytePtr), Is.EqualTo(false));
19+
}
20+
}
21+
}
22+
}

Src/Tests/HelpStruct.cs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using StackMemoryAttributes.Attributes;
2+
using StackMemoryCollections.Attibutes;
3+
4+
namespace Tests
5+
{
6+
[GenerateHelper]
7+
[GenerateWrapper]
8+
public struct HelpStruct
9+
{
10+
public HelpStruct(
11+
int int32,
12+
long int64,
13+
HelpClass helpClass,
14+
HelpClass helpClass2
15+
)
16+
{
17+
Int32 = int32;
18+
Int64 = int64;
19+
HelpClass = helpClass;
20+
HelpClass2 = helpClass2;
21+
}
22+
23+
public long Int64;
24+
public int Int32;
25+
26+
public HelpClass HelpClass;
27+
28+
[AsPointer]
29+
public HelpClass HelpClass2 { get; set; }
30+
}
31+
32+
[GenerateHelper]
33+
[GenerateWrapper]
34+
public struct HelpStruct2
35+
{
36+
public HelpStruct2(
37+
int int32,
38+
long int64
39+
)
40+
{
41+
Int32 = int32;
42+
Int64 = int64;
43+
}
44+
45+
public long Int64 { get; set; }
46+
public int Int32;
47+
}
48+
49+
[GenerateHelper]
50+
[GenerateWrapper]
51+
public class HelpClass
52+
{
53+
public HelpClass()
54+
{
55+
}
56+
57+
public HelpClass(
58+
int int32,
59+
long int64,
60+
HelpStruct2 helpStruct2
61+
)
62+
{
63+
Int32 = int32;
64+
Int64 = int64;
65+
HelpStruct2 = helpStruct2;
66+
}
67+
68+
public long Int64;
69+
70+
[AsPointer]
71+
public HelpClass HelpClass2 { get; set; }
72+
73+
public int Int32 { get; set; }
74+
75+
public HelpStruct2 HelpStruct2 { get; set; }
76+
}
77+
}

0 commit comments

Comments
 (0)