You are not logged in.

Dear visitor, welcome to Jabaco - Community. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

OlimilO

Intermediate

  • "OlimilO" is male
  • "OlimilO" started this thread

Posts: 277

Date of registration: Jan 18th 2009

Location: Germany

Occupation: software engineer

  • Send private message

1

Tuesday, March 3rd 2009, 3:56pm

storing an enum-constant in a collection

Hi

I tried this, but I encountered some problems

Jabaco Source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Option Explicit
Public Enum MyEnum
    FlagNone = 0
    Flag0 = 1
    Flag1 = 2
    Flag2 = 4
    Flag3 = 8
End Enum
Dim col As Collection
Public Sub Command1_Click()
   
   Dim f As MyEnum = MyEnum.Flag2   
   MsgBox f
   
   col = New Collection
   
   Dim b As Boolean
   
   b = col.Add(f)
   MsgBox b ' why false?
   
   Dim f1 As MyEnum
   
   'f1 = col.Item(1)
   'ClassCastException: java.lang.Long cannot be cast to MyEnum
   'why?
      
   b = col.Add(1234)
   
   MsgBox b ' why false?
   
   Dim l As Integer'Long
   l = col.Item(1)
   
   'f1 = Cast(l, MyEnum) 'does not compile - why?
   
   f1 = l   
   MsgBox l & " " & f1
   
   l = col.Item(2)
   
   f1 = l
   MsgBox l & " " & f1
   
End Sub


?(

many thanks in advance

OlimilO

A1880

Intermediate

  • "A1880" is male

Posts: 500

Date of registration: Jan 1st 2009

Location: Hanover, Germany

Occupation: Software Engineer

Hobbies: Hilbert Curves

  • Send private message

2

Tuesday, March 3rd 2009, 4:27pm

Collections are used to store VBVariant Objects

Hi,
Java Collections are used to store VBVariant Objects rather than simple scalar variables.
An Enum is a non-Object. To store Enums in a Collection, you'ld have to assign the Enum value to an instance of VBVariant.
VBVariant is a "wrapper object" around various data types including a normal integer.

Happy experimenting!

A1880

This post has been edited 1 times, last edit by "A1880" (Mar 4th 2009, 12:40pm)


Manuel

Administrator

  • "Manuel" is male

Posts: 256

Date of registration: Jul 16th 2008

Location: Erlangen, Germany

Occupation: Software Developer

Hobbies: Jabaco, game theory, text-mining

  • Send private message

3

Tuesday, March 3rd 2009, 8:25pm

Jabaco Source

1
MsgBox b ' why false?


Next Framework-update will fix that. FYI: I'll publish the access to the subversion repository very soon - I think that will speedup the future development of the framework.

Jabaco Source

1
f1 = Cast(l, MyEnum) 'does not compile - why?


Beta2 can handle that. Sorry for the procrastination. I have smaller problems with the language design. Some modifications are more extensive than I thought.

A1880

Intermediate

  • "A1880" is male

Posts: 500

Date of registration: Jan 1st 2009

Location: Hanover, Germany

Occupation: Software Engineer

Hobbies: Hilbert Curves

  • Send private message

4

Tuesday, March 3rd 2009, 11:19pm

Hi,
another try to store enums in collections.
I have used VBVariant as wrapper objects.
Currently, casting of enums does not really work.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Option Explicit
Public Enum MyEnum
    FlagNone = 0
    Flag0 = 1
    Flag1 = 2
    Flag2 = 4
    Flag3 = 8
End Enum

Dim col As Collection

Public Sub Command1_Click()   
   Dim b As Boolean
   Dim f As MyEnum = MyEnum.Flag2   
   Dim f1 As MyEnum
   Dim l As Integer
   Dim o As Object 
   Dim v As VBVariant

   MsgBox "1:: MyEnum.Flag2: " & f
   
   col = New Collection
      
   v = e2v(f)
   b = col.Add(v)
   MsgBox "2:: col.Add: " & b ' why false?
      
   v = col.Item(1)
   f1 = v2e(v)
      
   v = New VBVariant(1234)
   b = col.Add(v)
   
   MsgBox "3:: " & b ' why false?
   
   v = col.Item(2)
   l = v.intValue
   
   'f1 = Cast(l, MyEnum) 'does not compile - why?
   
   f1 = l   
   MsgBox "4:: " & l & " " & f1
   
   o = col.Item(1)
   v = Cast(o, VBVariant)
   l = v.intValue 
   
   f1 = l
   MsgBox "5:: " & l & " " & f1   
End Sub

Private Function e2v(e As MyEnum) As VBVariant
   Dim i As Integer 
   Dim v As VBVariant 
   
   '  the following does not work (yet)
   ' v2i = New VBVariant(Cast(e, integer))
   
   Select Case e
   Case FlagNone:
      i = 0
   Case Flag0:
      i = 1
   Case Flag1:
      i = 2
   Case Flag2:
      i = 4
   Case Flag3:
      i = 8
   End Select
   
   v = New VBVariant(i)
   e2v = v
End Function

Private Function v2e(v As VBVariant) As MyEnum 
   '  the following does not work (yet)
   ' v2e = Cast(v.intValue, MyEnum)
   
   Select Case v.intValue 
   Case 0:
      v2e = myenum.flagnone
   Case 1:
      v2e = myenum.flag0
   Case 2:
      v2e = myenum.flag1
   Case 4:
      v2e = myenum.flag2
   Case 8:
      v2e = myenum.flag3
   End Select      
End Function


Enjoy!

A1880

Rate this thread
WoltLab Burning Board