Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Generics] Nested generics & import issue #647

Open
thareh opened this issue Jan 3, 2024 · 0 comments
Open

[Generics] Nested generics & import issue #647

thareh opened this issue Jan 3, 2024 · 0 comments

Comments

@thareh
Copy link
Contributor

thareh commented Jan 3, 2024

Good day,

Thanks for all the updates lately! Greatly appreciated.

Here's another bug I've found:

Test.bmx

Framework BRL.Blitz
Import BRL.Collections
Import BRL.StandardIO

'Import "Bar.bmx"

Include "Bar.bmx"
Include "TreeMap2D.bmx"

New TBar()

Bar.bmx

'Framework BRL.Blitz
'Import "TreeMap2D.bmx"

Type TBar
	
	Global map:TTreeMap2D<UInt, String, TBar> = New TTreeMap2D<UInt, String, TBar>()
	
	Method New()
		map[1, "test"] = Self
	EndMethod
	
EndType

TreeMap2D.bmx

'Framework BRL.Blitz
'Import BRL.Collections

Type TTreeMap2D<A, B, C>
	
Private
	Field map:TTreeMap<A, TTreeMap<B, C>> = New TTreeMap<A, TTreeMap<B, C>>()
	
Public
	Method Operator[]:TTreeMap<B, C>(ka:A)
		Return map[ka]
	EndMethod
	
	Method Operator[]:C(ka:A, kb:B)
		If Not map[ka]
			Return Null
		EndIf
		
		Return map[ka][kb]
	EndMethod
	
	Method Operator[]=(ka:A, kb:B, val:C)
		If Not map[ka]
			map[ka] = New TTreeMap<B, C>()
		EndIf
		
		map[ka][kb] = val
	EndMethod
	
	Method Clear()
		map.Clear()
	EndMethod
	
	Method Contains:Int(ka:A)
		Return map[ka] <> Null
	EndMethod
	
	Method Contains:Int(ka:A, kb:B)
		If Not map[ka]
			Return False
		EndIf
		
		Return map[ka][kb] <> Null
	EndMethod
	
	Method Keys:ICollection<A>()
		Return map.Keys()
	EndMethod
	
	Method Keys:ICollection<B>(ka:A)
		If Not map[ka]
			Return New TArrayList<B>(0)
		EndIf
		
		Return map[ka].Keys()
	EndMethod
	
	Method SubKeys:ICollection<B>()
		Local list:TLinkedList<B> = New TLinkedList<B>()
		
		For Local map:TTreeMap<B, C> = EachIn Self.map.Values()
			For Local key:B = EachIn map.Keys()
				list.AddLast(key)
			Next
		Next
		
		Return list
	EndMethod
	
	Method Values:ICollection<C>(ka:A)
		If Not map[ka]
			Return New TArrayList<C>(0)
		EndIf
		
		Return map[ka].Values()
	EndMethod
	
	Method Values:ICollection<C>()
		Local list:TLinkedList<C> = New TLinkedList<C>()
		
		For Local ka:A = EachIn map.Keys()
			For Local v:C = EachIn map[ka].Values()
				list.AddLast(v)
			Next
		Next
		
		Return list
	EndMethod
	
	Method Count:Int()
		Return map.Count()
	EndMethod
	
	Method Count:Int(ka:A)
		If Not map[ka]
			Return 0
		EndIf
		
		Return map[ka].Count()
	EndMethod
	
	Method TotalCount:Int()
		Local count:Int
		
		For Local map:TTreeMap<B, C> = EachIn map.Values()
			count:+map.Count()
		Next
		
		Return count
	EndMethod
	
	Method Remove:Int(ka:A)
		Return map.Remove(ka)
	EndMethod
	
	Method Remove:Int(ka:A, kb:B)
		If Not map[ka]
			Return False
		EndIf
		
		Return map[ka].Remove(kb)
	EndMethod
	
	Method IsEmpty:Int()
		Return map.IsEmpty()
	EndMethod
	
	Method IsEmpty:Int(ka:A)
		If Not map[ka]
			Return True
		EndIf
		
		Return map[ka].IsEmpty()
	EndMethod
	
EndType

When using include it works fine, but when importing it does not.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant