On 11 December 2012 20:33, Ciprian Teodorov <[email protected]> wrote:
> Hi guys,
>
> today I have commited to the NativeBoost repository a new core class, the
> NBExternalEnumerationType,
> which reifies the enum declarations in C and offers a nice interface
> (especially in terms of debug/inspect).
>
> To use it just subclass the NBExternalEnumeration and add an #enumDecl
> method to the class side such as:
>
> NBExternalEnumeration subclass: #NBTestEnumeration
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'NativeBoost-Tests'
>
> NBTestEnumeration class>>enumDecl
> ^ {(#AAA -> 1).
> (#BBB -> 2).
> (#CCC -> 3).
> (#DDD -> 2400)} asDictionary
>
just one comment: imo, it would be better to not force users to
remember that they should use
complicated syntax in this method.

i propose following syntax:

NBTestEnumeration class>>enumDecl
 ^ #(
  #AAA 1
  #BBB -> 2
  #CCC -> 3
  #DDD -> 2400
  )

then you can have

NBTestEnumeration class>>initializeEnum

  dict := Dictionary newFromPairs: self enumDecl
   .....

then #initialize should just do 'self initializeEnum'



> DO NOT FORGET to call the #initialize method on your class. The rest is
> automatically done ;)
>
> You can use your new enum in two ways:
>
> add it to a client class poolDictionaries list (see  #NBExternalEnumTests
> for an example), and then just write CCC in your code -- CCC here is an item
> of your enum
> or you can send the name of an item to your class --- NBTestEnumeration DDD
>
> The NBExternalEnumeration implements  (instance and class) some more API
> methods like:
>
> #itemAt: retrieves the item having a specific value  --- NBTestEnumeration
> itemAt: 2
> #includes: checks the existence of a specific item in the enum ---
> NBTestEnumeration includes: #AAA
>
> Having this already gives us a nice interface to working with enums. Now I
> plan to improve a little bit on performance and usage scenarios:
>
> the possibility to accept smalltalk integers as valid input/output for
> functions(or callbacks) that use enums as arguments/return.
> support the different representation types for the enum values (int/uint)
>

to my thinking, it not worth implementing separate type converter for enums..
just put a note that if people would like to deal nicely with enums
returned by function(s),
they should use a converter , something like that:

enumValue := MyEnumeration fromInteger: (self callSomeFunctionReturningInt)

then this method can implement converting from int->enum object,
as well as do a range checking etc.
in same way, if people want to use 'enumValue' for passing it as
parameter to external function,
they should not pass it directly , but use 'enumValue value'

In general, it would be cool to have good 'enum type' converter..
(despite that i will never use it,
because to my taste its not really worth it, and i can live with
integers and in most cases you hide such low-level details from
end-user anyways ;))
but for those, who want more clarity and better structure in their
code, of course, they can use it .


> So that will be for now. Feel free to try it out and send me any comments
> and/or improvement ideas, It will be my pleasure to improve it.
> Cheers,
> --
> Dr. Ciprian TEODOROV
> Ingénieur Développement CAO
>
> tél : 06 08 54 73 48
> mail : [email protected]
> www.teodorov.ro



-- 
Best regards,
Igor Stasenko.

Reply via email to