Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Acceleo/OCL Operations Reference"

(OCL operation reference)
m (reject ( expr : OclExpression ) : Collection(T))
 
(12 intermediate revisions by 3 users not shown)
Line 20: Line 20:
  
 
=== oclAsType ( typespec : Classifier ) : T ===
 
=== oclAsType ( typespec : Classifier ) : T ===
Returns *self* statically typed as typespec if it is an instance of this type. *Note* that this does not alter the runtime value of *self*, it only enables access to subtype operations. This operation allows users to cast '''self''' to another type.
+
Returns ''self'' statically typed as typespec if it is an instance of this type. *Note* that this does not alter the runtime value of ''self'', it only enables access to subtype operations. This operation allows users to cast ''self'' to another type.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 33: Line 33:
  
 
=== oclIsInvalid () : Boolean ===
 
=== oclIsInvalid () : Boolean ===
Returns '''true''' if '''self''' is equal to *invalid*.
+
Returns '''true''' if ''self'' is equal to *invalid*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 40: Line 40:
 
! style="background: #BCBCBC;" align="center"| Result
 
! style="background: #BCBCBC;" align="center"| Result
 
|-
 
|-
| let anObject : String = null in anObject.oclIsUndefined()
+
| let anObject : String = null in anObject.oclIsInvalid()
 
| false
 
| false
 
|-
 
|-
| let anObject : String = invalid in anObject.oclIsUndefined()
+
| let anObject : String = invalid in anObject.oclIsInvalid()
 
| true
 
| true
 
|-
 
|-
| let anObject : String = 'null' in anObject.oclIsUndefined()
+
| let anObject : String = 'null' in anObject.oclIsInvalid()
 
| false
 
| false
 
|}
 
|}
 
  
 
=== oclIsKindOf( Classifier typespec ) : Boolean ===
 
=== oclIsKindOf( Classifier typespec ) : Boolean ===
Returns **true** if the type of '''self''' corresponds to the type or supertype of typespec, '''false''' otherwise. This operation allows users to check the class hierarchy of '''self''' much like would an '''instanceof''' Java.
+
Returns '''true''' if the type of ''self'' corresponds to the type or supertype of typespec, '''false''' otherwise. This operation allows users to check the class hierarchy of ''self'' much like would an '''instanceof''' Java.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 71: Line 70:
  
 
=== oclIsTypeOf( typespec : Classifier ) : Boolean ===
 
=== oclIsTypeOf( typespec : Classifier ) : Boolean ===
Returns '''true''' if the type of '''self''' is the same as typespec, or **false** otherwise. This operation allows users to check the exact class type of '''self'''.
+
Returns '''true''' if the type of ''self'' is the same as typespec, or '''false''' otherwise. This operation allows users to check the exact class type of ''self''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 87: Line 86:
 
| false
 
| false
 
|}
 
|}
 
  
 
=== oclIsUndefined () : Boolean ===
 
=== oclIsUndefined () : Boolean ===
Returns **true** if *self* is equal to *invalid* or *null*.
+
Returns '''true''' if ''self'' is equal to '''invalid''' or '''null'''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 106: Line 104:
 
| false
 
| false
 
|}
 
|}
 
  
 
=== <> ( object : OclAny ) : Boolean ===
 
=== <> ( object : OclAny ) : Boolean ===
Returns **true** if *self* is a different object from *object*.
+
Returns '''true''' if ''self'' is a different object from ''object''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 128: Line 125:
  
 
=== = ( object : OclAny) : Boolean ===
 
=== = ( object : OclAny) : Boolean ===
Returns **true** if *self* is equal to *object*.
+
Returns '''true''' if ''self'' is equal to ''object''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 147: Line 144:
  
 
=== < ( object : T ) : Boolean ===
 
=== < ( object : T ) : Boolean ===
Returns **true** if *self* is comparable to *object* and less than *object*.
+
Returns '''true''' if ''self'' is comparable to ''object'' and less than ''object''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 166: Line 163:
  
 
=== > ( object : T ) : Boolean ===
 
=== > ( object : T ) : Boolean ===
Returns **true** if *self* is comparable to *object* and greater than *object*.
+
Returns '''true''' if ''self'' is comparable to ''object'' and greater than ''object''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 185: Line 182:
  
 
=== <= ( object : T ) : Boolean ===
 
=== <= ( object : T ) : Boolean ===
Returns **true** if *self* is comparable to *object* and less than or equal to *object*.
+
Returns '''true''' if ''self'' is comparable to ''object'' and less than or equal to ''object''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 204: Line 201:
  
 
=== >= ( object : T ) : Boolean ===
 
=== >= ( object : T ) : Boolean ===
Returns **true** if *self* is comparable to *object* and greater than or equal to *object*.
+
Returns '''true''' if ''self'' is comparable to ''object'' and greater than or equal to ''object''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 228: Line 225:
  
 
=== concat ( s : String ) : String ===
 
=== concat ( s : String ) : String ===
Returns a string containing *self* followed by *s*.
+
Returns a string containing ''self'' followed by *s*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 241: Line 238:
  
 
=== size () : Integer ===
 
=== size () : Integer ===
Returns the number of characters composing *self*.
+
Returns the number of characters composing ''self''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 254: Line 251:
  
 
=== substring ( lower : Integer, upper : Integer ) : String ===
 
=== substring ( lower : Integer, upper : Integer ) : String ===
Returns a string containing all characters from *self* starting from index *lower* up to index *upper* included. Both *lower* and *upper* parameters should be contained between *1* and *self.size()* included. *lower* cannot be greater than *upper*.
+
Returns a string containing all characters from ''self'' starting from index *lower* up to index *upper* included. Both *lower* and *upper* parameters should be contained between *1* and *self.size()* included. *lower* cannot be greater than *upper*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 273: Line 270:
  
 
=== toInteger () : Integer ===
 
=== toInteger () : Integer ===
Returns an Integer of value equal to *self*, or |invalid| if *self* does not represent an integer.
+
Returns an Integer of value equal to ''self'', or |invalid| if ''self'' does not represent an integer.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 292: Line 289:
  
 
=== toLower () : String ===
 
=== toLower () : String ===
Returns *self* with all characters converted to lowercase.
+
Returns ''self'' with all characters converted to lowercase.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 305: Line 302:
  
 
=== toReal () : Real ===
 
=== toReal () : Real ===
Returns a Real of value equal to *self*, or |invalid| if *self* does not represent a real.
+
Returns a Real of value equal to ''self'', or |invalid| if ''self'' does not represent a real.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 324: Line 321:
  
 
=== toUpper () : String ===
 
=== toUpper () : String ===
Returns *self* with all characters converted to uppercase.
+
Returns ''self'' with all characters converted to uppercase.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 340: Line 337:
  
 
=== Number::abs () : Number ===
 
=== Number::abs () : Number ===
Returns the absolute value of *self*, *self* if it is already a positive number.
+
Returns the absolute value of ''self'', ''self'' if it is already a positive number.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 356: Line 353:
  
 
=== Number::floor () : Integer ===
 
=== Number::floor () : Integer ===
Returns the integer part of *self* if it is a Real, *self* if it is an Integer.
+
Returns the integer part of ''self'' if it is a Real, ''self'' if it is an Integer.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 375: Line 372:
  
 
=== Number::max ( r : Number ) : Number ===
 
=== Number::max ( r : Number ) : Number ===
Returns the greatest number between *self* and *r*.
+
Returns the greatest number between ''self'' and *r*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 397: Line 394:
  
 
=== Number::min ( r : Number ) : Number ===
 
=== Number::min ( r : Number ) : Number ===
Returns the lowest number between *self* and *r*.
+
Returns the lowest number between ''self'' and *r*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 419: Line 416:
  
 
=== Number::round () : Integer ===
 
=== Number::round () : Integer ===
Returns the nearest integer to *self* if it is a Real, *self* if it is an Integer.
+
Returns the nearest integer to ''self'' if it is a Real, ''self'' if it is an Integer.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 441: Line 438:
  
 
=== Integer::div ( i : Integer ) : Integer ===
 
=== Integer::div ( i : Integer ) : Integer ===
Returns the integer quotient of the division of *self* by *i*.
+
Returns the integer quotient of the division of ''self'' by *i*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 457: Line 454:
  
 
=== Integer::mod ( i : Integer ) : Integer ===
 
=== Integer::mod ( i : Integer ) : Integer ===
Returns the integer remainder of the division of *self* by *i*.
+
Returns the integer remainder of the division of ''self'' by *i*.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 503: Line 500:
  
 
=== any ( expr : OclExpression ) : T ===
 
=== any ( expr : OclExpression ) : T ===
Returns any element contained in *self* that validates the condition *expr*, null otherwise. Evaluation is shortcut as soon as an element validating *expr* is found. Note that the result of this on unordered collections will be random if more than one element validates *expr*.
+
Returns any element contained in ''self'' that validates the condition ''expr'', null otherwise. Evaluation is shortcut as soon as an element validating ''expr'' is found. Note that the result of this on unordered collections will be random if more than one element validates ''expr''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 519: Line 516:
  
 
=== asBag () : Bag(T) ===
 
=== asBag () : Bag(T) ===
Returns a Bag containing all elements of *self*.
+
Returns a Bag containing all elements of ''self''.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 547: Line 544:
  
 
=== asOrderedSet () : OrderedSet(T) ===
 
=== asOrderedSet () : OrderedSet(T) ===
Returns an OrderedSet containing all elements of *self*. Element ordering is preserved when possible.
+
Returns an OrderedSet containing all elements of ''self''. Element ordering is preserved when possible.
  
 
{| border="1" cellpadding="5" cellspacing="0"
 
{| border="1" cellpadding="5" cellspacing="0"
Line 575: Line 572:
  
 
=== asSequence () : Boolean ===
 
=== asSequence () : Boolean ===
Returns a Sequence containing all elements of *self*. Element ordering is preserved when possible.
+
Returns a Sequence containing all elements of ''self''. Element ordering is preserved when possible.
+
 
+-------------------------------------------------------+-----------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                            | Result                |
+
|-
+=======================================================+=======================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{1, 2.0, '3'}->asSequence()                   | Sequence{1, 2.0, '3'} |
+
! style="background: #BCBCBC;" align="center"| Result
+-------------------------------------------------------+-----------------------+
+
|-
| Bag{1, 2.0, '3'}->asSequence()                       | Sequence{2.0, 1, '3'} |
+
| Sequence{1, 2.0, '3'}->asSequence()
+-------------------------------------------------------+-----------------------+
+
| Sequence{1, 2.0, '3'}
| OrderedSet{1, 2.0, '3'}->asSequence()                 | Sequence{1, 2.0, '3'} |
+
|-
+-------------------------------------------------------+-----------------------+
+
| Bag{1, 2.0, '3'}->asSequence()
| Set{1, 2.0, '3'}->asSequence()                       | Sequence{'3', 1, 2.0} |
+
| Sequence{2.0, 1, '3'}
+-------------------------------------------------------+-----------------------+
+
|-
 +
| OrderedSet{1, 2.0, '3'}->asSequence()
 +
| Sequence{1, 2.0, '3'}
 +
|-
 +
| Set{1, 2.0, '3'}->asSequence()
 +
| Sequence{'3', 1, 2.0}
 +
|}
  
  
 
=== asSet () : Set(T) ===
 
=== asSet () : Set(T) ===
Returns a Set containing all elements of *self*.
+
Returns a Set containing all elements of ''self''.
+
 
+-------------------------------------------------------+-----------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                            | Result                |
+
|-
+=======================================================+=======================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{1, 2.0, '3'}->asSet()                       | Set{1, '3', 2.0}     |
+
! style="background: #BCBCBC;" align="center"| Result
+-------------------------------------------------------+-----------------------+
+
|-
| Sequence{1, 1, 2.0, '3'}->asSet()                     | Set{'3', 1, 2.0}     |
+
| Sequence{1, 2.0, '3'}->asSet()
+-------------------------------------------------------+-----------------------+
+
| Set{1, '3', 2.0}
| Bag{1, 2.0, '3'}->asSet()                             | Set{2.0, 1, '3'}     |
+
|-
+-------------------------------------------------------+-----------------------+
+
| Sequence{1, 1, 2.0, '3'}->asSet()
| Bag{1, 1, 2.0, '3'}->asSet()                         | Set{1, '3', 2.0}     |
+
| Set{'3', 1, 2.0}
+-------------------------------------------------------+-----------------------+
+
|-
| OrderedSet{1, 2.0, '3'}->asSet()                     | Set{1, '3', 2.0}     |
+
| Bag{1, 2.0, '3'}->asSet()
+-------------------------------------------------------+-----------------------+
+
| Set{2.0, 1, '3'}
| OrderedSet{1, 1, 2.0, '3'}->asSet()                   | Set{'3', 1, 2.0}     |
+
|-
+-------------------------------------------------------+-----------------------+
+
| Bag{1, 1, 2.0, '3'}->asSet()
| Set{1, 2.0, '3'}->asSet()                             | Set{2.0, 1, '3'}     |
+
| Set{1, '3', 2.0}
+-------------------------------------------------------+-----------------------+
+
|-
| Set{1, 1, 2.0, '3'}->asSet()                         | Set{'3', 1, 2.0}     |
+
| OrderedSet{1, 2.0, '3'}->asSet()
+-------------------------------------------------------+-----------------------+
+
| Set{1, '3', 2.0}
 +
|-
 +
| OrderedSet{1, 1, 2.0, '3'}->asSet()
 +
| Set{'3', 1, 2.0}
 +
|-
 +
| Set{1, 2.0, '3'}->asSet()
 +
| Set{2.0, 1, '3'}
 +
|-
 +
| Set{1, 1, 2.0, '3'}->asSet()
 +
| Set{'3', 1, 2.0}
 +
|}
 +
 
  
 
=== collect ( expr : OclExpression ) : Collection(T2) ===
 
=== collect ( expr : OclExpression ) : Collection(T2) ===
Returns a collection containing the result of applying *expr* on all elements contained in *self*.
+
Returns a collection containing the result of applying ''expr'' on all elements contained in ''self''.
+
 
+---------------------------------------------------------------+-----------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result                      |
+
|-
+===============================================================+=============================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'first', 'second'}->collect(toUpper())               | Sequence{'FIRST', 'SECOND'} |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+-----------------------------+
+
|-
 +
| Sequence{'first', 'second'}->collect(toUpper())
 +
| Sequence{'FIRST', 'SECOND'}
 +
|}
  
  
 
=== collectNested ( expr : OclExpression ) : Collection(T2) ===
 
=== collectNested ( expr : OclExpression ) : Collection(T2) ===
Returns a collection containing all the elements contained in *self* on which we applied the OclExpression *expr*. The results won't be flattened. The type of the resulting collection depends on the type of *self*.
+
Returns a collection containing all the elements contained in ''self'' on which we applied the OclExpression ''expr''. The results won't be flattened. The type of the resulting collection depends on the type of ''self''.
  
 
For the purpose of these examples we'll assume here that we have a Class *Person* with a reference *children*. Our model contains two persons such as *person1.children = {James, Jane}* and *person2.children = {John}*.
 
For the purpose of these examples we'll assume here that we have a Class *Person* with a reference *children*. Our model contains two persons such as *person1.children = {James, Jane}* and *person2.children = {John}*.
+
 
+
{| border="1" cellpadding="5" cellspacing="0"
+-------------------------------------------------------+-------------------------------------------------+
+
|-
| Expression                                           | Result                                          |
+
! style="background: #BCBCBC;" align="center"| Expression
+=======================================================+=================================================+
+
! style="background: #BCBCBC;" align="center"| Result
| self.persons->collectNested(children.firstname)       | Sequence{Sequence{James, Jane}, Sequence{John}} |
+
|-
+-------------------------------------------------------+-------------------------------------------------+
+
| self.persons->collectNested(children.firstname)
 +
| Sequence{Sequence{James, Jane}, Sequence{John}}
 +
|}
  
  
 
=== count ( object : T ) : Integer ===
 
=== count ( object : T ) : Integer ===
Returns how many times *object* is in the collection *self*.
+
Returns how many times ''object'' is in the collection ''self''.
  
  +---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
  | Expression                                                    | Result        |
+
|-
  +===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
  | Sequence{2.3, 5.2}->count(5.2)                               | 1             |
+
! style="background: #BCBCBC;" align="center"| Result
  +---------------------------------------------------------------+----------------+
+
|-
  | Set{3, 'test', 4.0, 4, 4.0, 'test'}->count(null)             | 0             |
+
| Sequence{2.3, 5.2}->count(5.2)
  +---------------------------------------------------------------+----------------+
+
| 1
  | Set{3, null, 4.0, null, 'test'}->count(null)                 | 1             |
+
|-
  +---------------------------------------------------------------+----------------+
+
| Set{3, 'test', 4.0, 4, 4.0, 'test'}->count(null)
  | Bag{3, null, 4.0, null, 'test'}->count(null)                 | 2             |
+
| 0
  +---------------------------------------------------------------+----------------+
+
|-
 +
| Set{3, null, 4.0, null, 'test'}->count(null)
 +
| 1
 +
|-
 +
| Bag{3, null, 4.0, null, 'test'}->count(null)
 +
| 2
 +
|}
  
  
 
=== excludes ( object : T ) : Boolean ===
 
=== excludes ( object : T ) : Boolean ===
Returns **true** if *object* is not contained in *self*, **false** otherwise.
+
Returns '''true''' if ''object'' is not contained in ''self'', '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3}->excludes(2.1)                                 | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{2.0}->excludes(2)                                   | false         |
+
| Sequence{2.3}->excludes(2.1)
+---------------------------------------------------------------+----------------+
+
| true
 +
|-
 +
| Sequence{2.0}->excludes(2)
 +
| false
 +
|}
  
  
 
=== excludesAll ( c2 : Collection(T) ) : Boolean ===
 
=== excludesAll ( c2 : Collection(T) ) : Boolean ===
Returns **true** if no element of *c2* is contained in *self*, **false** otherwise.
+
Returns '''true''' if no element of *c2* is contained in ''self'', '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3, 5.2, 'a', 3, null}->excludesAll(Set{4, null})   | false         |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{2.3, 5.2, 'a', 3}->excludesAll(Set{4, null})         | true           |
+
| Sequence{2.3, 5.2, 'a', 3, null}->excludesAll(Set{4, null})
+---------------------------------------------------------------+----------------+
+
| false
 +
|-
 +
| Sequence{2.3, 5.2, 'a', 3}->excludesAll(Set{4, null})
 +
| true
 +
|}
  
  
 
=== excluding ( object : T ) : Collection(T) ===
 
=== excluding ( object : T ) : Collection(T) ===
Returns a collection containing all elements of *self* minus all occurences of *object*. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when excluding elements.
+
Returns a collection containing all elements of ''self'' minus all occurences of ''object''. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when excluding elements.
+
+-----------------------------------------------------+-------------------------+
+
| Expression                                          | Result                  |
+
+=====================================================+=========================+
+
| Sequence{'b', 'a', 'b', 'c'}->excluding('b')        | Sequence{'a', 'c'}      |
+
+-----------------------------------------------------+-------------------------+
+
| Bag{'b', 'a', 'b', 'c'}->excluding('b')            | Bag{'c', 'a'}          |
+
+-----------------------------------------------------+-------------------------+
+
| OrderedSet{'b', 'a', 'b', 'c'}->excluding('b')      | Set{'c', 'a'}          |
+
+-----------------------------------------------------+-------------------------+
+
| Set{'b', 'a', 'b', 'c'}->excluding('b')            | Set{'c', 'a'}          |
+
+-----------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Sequence{'b', 'a', 'b', 'c'}->excluding('b')
 +
| Sequence{'a', 'c'}
 +
|-
 +
| Bag{'b', 'a', 'b', 'c'}->excluding('b')
 +
| Bag{'c', 'a'}
 +
|-
 +
| OrderedSet{'b', 'a', 'b', 'c'}->excluding('b')
 +
| Set{'c', 'a'}
 +
|-
 +
| Set{'b', 'a', 'b', 'c'}->excluding('b')
 +
| Set{'c', 'a'}
 +
|}
  
  
 
=== exists ( expr : OclExpression ) : Boolean ===
 
=== exists ( expr : OclExpression ) : Boolean ===
Returns **true** if at least one element in *self* validates the condition *expr*, **false** otherwise. The evaluation stops as soon as one element validating *expr* is found.
+
Returns '''true''' if at least one element in ''self'' validates the condition ''expr'', '''false''' otherwise. The evaluation stops as soon as one element validating ''expr'' is found.
+
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| Sequence{2.3, 5.2}->exists(self > 3)                          | true          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Sequence{2.3, 5.2}->exists(self > 3)
 +
| true
 +
|}
  
  
 
=== flatten () : Collection(T2) ===
 
=== flatten () : Collection(T2) ===
Returns a collection containing all elements of *self* recursively flattened. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when flattening.  
+
Returns a collection containing all elements of ''self'' recursively flattened. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when flattening.  
+
 
+---------------------------------------------------------------------------+-------------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                                | Result                              |
+
|-
+===========================================================================+=====================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{Set{1, 2, 3}, Sequence{2.0, 3.0}, Bag{'test'}}->flatten()       | Sequence{1, 2, 3, 2.0, 3.0, 'test'} |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------------------+-------------------------------------+
+
|-
| Bag{Set{Bag{'test', 2, 3.0}}, Sequence{OrderedSet{2.0, 3, 1}}}->flatten() | Bag{1, 2, 3, 2.0, 3.0, 'test'}     |
+
| Sequence{Set{1, 2, 3}, Sequence{2.0, 3.0}, Bag{'test'}}->flatten()
+---------------------------------------------------------------------------+-------------------------------------+
+
| Sequence{1, 2, 3, 2.0, 3.0, 'test'}
| OrderedSet{Set{Bag{'test', 2, 3.0}}, Sequence{Set{2.0, 3, 1}}}->flatten() | Set{3.0, 2, 1, 3, 'test', 2.0}     |
+
|-
+---------------------------------------------------------------------------+-------------------------------------+
+
| Bag{Set{Bag{'test', 2, 3.0}}, Sequence{OrderedSet{2.0, 3, 1}}}->flatten()
| Set{Set{Bag{'test', 2, 3.0}}, Sequence{OrderedSet{2.0, 3, 1}}}->flatten() | Set{3.0, 2, 1, 3, 'test', 2.0}     |
+
| Bag{1, 2, 3, 2.0, 3.0, 'test'}
+---------------------------------------------------------------------------+-------------------------------------+
+
|-
 +
| OrderedSet{Set{Bag{'test', 2, 3.0}}, Sequence{Set{2.0, 3, 1}}}->flatten()
 +
| Set{3.0, 2, 1, 3, 'test', 2.0}
 +
|-
 +
| Set{Set{Bag{'test', 2, 3.0}}, Sequence{OrderedSet{2.0, 3, 1}}}->flatten()
 +
| Set{3.0, 2, 1, 3, 'test', 2.0}
 +
|}
  
  
 
=== forAll ( expr : OclExpression ) : Boolean ===
 
=== forAll ( expr : OclExpression ) : Boolean ===
Returns **true** if the all the elements contained in *self* validate the condition *expr*, **false** otherwise.
+
Returns '''true''' if the all the elements contained in ''self'' validate the condition ''expr'', '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3, 5.2}->forAll(self > 3)                         | false         |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{2.3, 5.2}->forAll(self > 1.2)                       | true           |
+
| Sequence{2.3, 5.2}->forAll(self > 3)
+---------------------------------------------------------------+----------------+
+
| false
 +
|-
 +
| Sequence{2.3, 5.2}->forAll(self > 1.2)
 +
| true
 +
|}
  
  
 
=== includes ( object : T ) : Boolean ===
 
=== includes ( object : T ) : Boolean ===
Returns **true** if *object* is contained in *self*, **false** otherwise.
+
Returns '''true''' if ''object'' is contained in ''self'', '''false''' otherwise.
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| Sequence{2.3}->includes(2.1)                                  | false          |
+
+---------------------------------------------------------------+----------------+
+
| Sequence{2.0}->includes(2)                                    | true          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Sequence{2.3}->includes(2.1)
 +
| false
 +
|-
 +
| Sequence{2.0}->includes(2)
 +
| true
 +
|}
  
  
 
=== includesAll ( c2 : Collection(T) ) : Boolean ===
 
=== includesAll ( c2 : Collection(T) ) : Boolean ===
Returns **true** if all element of *c2* are contained in *self*, **false** otherwise.
+
Returns '''true''' if all element of *c2* are contained in ''self'', '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3, 5.2, 'a', 3, null}->includesAll(Set{3, null})   | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{2.3, 5.2, 'a', 3}->includesAll(Set{3, null})         | false         |
+
| Sequence{2.3, 5.2, 'a', 3, null}->includesAll(Set{3, null})
+---------------------------------------------------------------+----------------+
+
| true
 +
|-
 +
| Sequence{2.3, 5.2, 'a', 3}->includesAll(Set{3, null})
 +
| false
 +
|}
  
  
 
=== including ( object : T ) : Collection(T) ===
 
=== including ( object : T ) : Collection(T) ===
Returns a collection containing all elements of *self* followed by *object*. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when including elements.
+
Returns a collection containing all elements of ''self'' followed by ''object''. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when including elements.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b'}->including('c')                 | Sequence{'a', 'b', 'c'} |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
| Bag{'a', 'b'}->including('c')                       | Bag{'a', 'c', 'b'}     |
+
| Sequence{'a', 'b'}->including('c')
+-----------------------------------------------------+-------------------------+
+
| Sequence{'a', 'b', 'c'}
| OrderedSet{'a', 'b'}->including('c')               | Set{'a', 'c', 'b'}     |
+
|-
+-----------------------------------------------------+-------------------------+
+
| Bag{'a', 'b'}->including('c')
| Set{'a', 'b'}->including('c')                       | Set{'a', 'c', 'b'}     |
+
| Bag{'a', 'c', 'b'}
+-----------------------------------------------------+-------------------------+
+
|-
 +
| OrderedSet{'a', 'b'}->including('c')
 +
| Set{'a', 'c', 'b'}
 +
|-
 +
| Set{'a', 'b'}->including('c')
 +
| Set{'a', 'c', 'b'}
 +
|}
  
  
 
=== isEmpty () : Boolean ===
 
=== isEmpty () : Boolean ===
Returns **true** if *self* is empty, **false** otherwise.
+
Returns '''true''' if ''self'' is empty, '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2, 'a'}->isEmpty()                                   | false         |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{null}->isEmpty()                                     | false         |
+
| Sequence{2, 'a'}->isEmpty()
+---------------------------------------------------------------+----------------+
+
| false
| Sequence{}->isEmpty()                                         | true           |
+
|-
+---------------------------------------------------------------+----------------+
+
| Sequence{null}->isEmpty()
 +
| false
 +
|-
 +
| Sequence{}->isEmpty()
 +
| true
 +
|}
  
  
 
=== isUnique ( expr : OclExpression ) : Boolean ===
 
=== isUnique ( expr : OclExpression ) : Boolean ===
Returns **true** if all elements contained in *self* evaluate to a distinct value for *expr*.
+
Returns '''true''' if all elements contained in ''self'' evaluate to a distinct value for ''expr''.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3, 5.2}->isUnique(self > 3)                       | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{2.3, 5.2}->isUnique(self > 1)                       | false         |
+
| Sequence{2.3, 5.2}->isUnique(self > 3)
+---------------------------------------------------------------+----------------+
+
| true
 +
|-
 +
| Sequence{2.3, 5.2}->isUnique(self > 1)
 +
| false
 +
|}
  
  
 
=== notEmpty () : Boolean ===
 
=== notEmpty () : Boolean ===
Returns **true** if *self* contains at least one element, **false** otherwise.
+
Returns '''true''' if ''self'' contains at least one element, '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2, 'a'}->notEmpty()                                 | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{null}->notEmpty()                                   | true           |
+
| Sequence{2, 'a'}->notEmpty()
+---------------------------------------------------------------+----------------+
+
| true
| Sequence{}->notEmpty()                                       | false         |
+
|-
+---------------------------------------------------------------+----------------+
+
| Sequence{null}->notEmpty()
 +
| true
 +
|-
 +
| Sequence{}->notEmpty()
 +
| false
 +
|}
  
  
 
=== one ( expr : OclExpression ) : Boolean ===
 
=== one ( expr : OclExpression ) : Boolean ===
Returns **true** if there is only one element contained in *self* that validates the condition *expr*, **false** otherwise.
+
Returns '''true''' if there is only one element contained in ''self'' that validates the condition ''expr'', '''false''' otherwise.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{1.2, 2.3, 5.2, 0.9}->one(self < 1)                   | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{1.2, 2.3, 5.2, 0.9}->one(self < 2)                   | false         |
+
| Sequence{1.2, 2.3, 5.2, 0.9}->one(self < 1)
+---------------------------------------------------------------+----------------+
+
| true
 +
|-
 +
| Sequence{1.2, 2.3, 5.2, 0.9}->one(self < 2)
 +
| false
 +
|}
  
  
 
=== product ( c2 : Collection(T2) ) : Set(Tuple(first : T, second : T2)) ===
 
=== product ( c2 : Collection(T2) ) : Set(Tuple(first : T, second : T2)) ===
Returns a Set of Tuples which represents the cartesian product of *self* with *c2*.
+
Returns a Set of Tuples which represents the cartesian product of ''self'' with *c2*.
+
 
+------------------------------------------+-----------------------------------------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                              | Result                                                          |
+
|-
+==========================================+=================================================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{3, 4}->product(Bag{3.0, 4.0})   | Set{Tuple{3, 3.0}, Tuple{3, 4.0}, Tuple{4, 3.0}, Tuple{4, 4.0}} |
+
! style="background: #BCBCBC;" align="center"| Result
+------------------------------------------+-----------------------------------------------------------------+
+
|-
| Set{3, 4}->product(OrderedSet{3.0, 4.0}) | Set{Tuple{3, 3.0}, Tuple{3, 4.0}, Tuple{4, 3.0}, Tuple{4, 4.0}} |
+
| Sequence{3, 4}->product(Bag{3.0, 4.0})
+------------------------------------------+-----------------------------------------------------------------+
+
| Set{Tuple{3, 3.0}, Tuple{3, 4.0}, Tuple{4, 3.0}, Tuple{4, 4.0}}
 +
|-
 +
| Set{3, 4}->product(OrderedSet{3.0, 4.0})
 +
| Set{Tuple{3, 3.0}, Tuple{3, 4.0}, Tuple{4, 3.0}, Tuple{4, 4.0}}
 +
|}
  
  
 
=== reject ( expr : OclExpression ) : Collection(T) ===
 
=== reject ( expr : OclExpression ) : Collection(T) ===
Returns a collection with all elements of *self* except for those who validate the OclExpression *expr*.  
+
Returns a collection with all elements of ''self'' except for those who validate the OclExpression ''expr''.  
+
+-------------------------------------------------------+-------------------------+
+
| Expression                                            | Result                  |
+
+=======================================================+=========================+
+
| Sequence{1, 2, 3}->reject(i : Integer | i > 1 )      | Sequence{1}            |
+
+-------------------------------------------------------+-------------------------+
+
| Bag{1, 2, 3}->reject(i : Integer | i > 1 )            | Bag{1}                  |
+
+-------------------------------------------------------+-------------------------+
+
| OrderedSet{1, 2, 3}->reject(i : Integer | i > 1 )    | OrderedSet{1}          |
+
+-------------------------------------------------------+-------------------------+
+
| Set{1, 2, 3}->reject(i : Integer | i > 1 )            | Set{1}                  |
+
+-------------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Sequence{1, 2, 3}->reject(i : Integer &#x7C; i > 1 )
 +
| Sequence{1}
 +
|-
 +
| Bag{1, 2, 3}->reject(i : Integer &#x7C; i > 1 )
 +
| Bag{1}
 +
|-
 +
| OrderedSet{1, 2, 3}->reject(i : Integer &#x7C; i > 1 )
 +
| OrderedSet{1}
 +
|-
 +
| Set{1, 2, 3}->reject(i : Integer &#x7C; i > 1 )
 +
| Set{1}
 +
|}
  
 
=== select ( expr : OclExpression ) : Collection(T) ===
 
=== select ( expr : OclExpression ) : Collection(T) ===
Returns a collection with all elements of *self* that validate the OclExpression *expr*.
+
Returns a collection with all elements of ''self'' that validate the OclExpression ''expr''.
+
+-------------------------------------------------------+-------------------------+
+
| Expression                                            | Result                  |
+
+=======================================================+=========================+
+
| Sequence{1, 2, 3}->select(i : Integer | i > 1)        | Sequence{2, 3}          |
+
+-------------------------------------------------------+-------------------------+
+
| Bag{1, 2, 3}->select(i : Integer | i > 1 )            | Bag{3, 2}              |
+
+-------------------------------------------------------+-------------------------+
+
| OrderedSet{1, 2, 3}->select(i : Integer | i > 1 )    | OrderedSet{2, 3}        |
+
+-------------------------------------------------------+-------------------------+
+
| Set{1, 2, 3}->select(i : Integer | i > 1 )            | Set{3, 2}              |
+
+-------------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Sequence{1, 2, 3}->select(i : Integer &#x7C; i > 1)
 +
| Sequence{2, 3}
 +
|-
 +
| Bag{1, 2, 3}->select(i : Integer &#x7C; i > 1 )
 +
| Bag{3, 2}
 +
|-
 +
| OrderedSet{1, 2, 3}->select(i : Integer &#x7C; i > 1 )
 +
| OrderedSet{2, 3}
 +
|-
 +
| Set{1, 2, 3}->select(i : Integer &#x7C; i > 1 )
 +
| Set{3, 2}
 +
|}
  
 
=== size () : Integer ===
 
=== size () : Integer ===
Returns the number of elements contained in *self*.
+
Returns the number of elements contained in ''self''.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3, 5}->size()                                     | 2             |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{}->size()                                           | 0             |
+
| Sequence{2.3, 5}->size()
+---------------------------------------------------------------+----------------+
+
| 2
 +
|-
 +
| Sequence{}->size()
 +
| 0
 +
|}
  
  
 
=== sortedBy ( expr : OclExpression ) : Sequence(T) ===
 
=== sortedBy ( expr : OclExpression ) : Sequence(T) ===
Returns a sorted collection containing all elements from *self* sorted in accordance with the OclExpression *expr*.
+
Returns a sorted collection containing all elements from ''self'' sorted in accordance with the OclExpression ''expr''.
 
This can be used on all kind of collections yet will always yield a Sequence-typed result except for OrderedSet which returns an OrderedSet.
 
This can be used on all kind of collections yet will always yield a Sequence-typed result except for OrderedSet which returns an OrderedSet.
  
 
For the purpose of these examples we'll assume here that we have a Class *Employee* with an attribute *age*. Our model contains two employees such as *employee1.age = 24* and *employee2.age = 27*.
 
For the purpose of these examples we'll assume here that we have a Class *Employee* with an attribute *age*. Our model contains two employees such as *employee1.age = 24* and *employee2.age = 27*.
 
+-------------------------------------------------------+--------------------------------+
 
| Expression                                            | Result                        |
 
+=======================================================+================================+
 
| self.employees->sortedBy(age)                        | Sequence{employee1, employee2} |
 
+-------------------------------------------------------+--------------------------------+
 
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| self.employees->sortedBy(age)
 +
| Sequence{employee1, employee2}
 +
|}
  
  
 
=== sum () : Real ===
 
=== sum () : Real ===
Returns the sum of all elements contained in *self* if they support the '+' operation.
+
Returns the sum of all elements contained in ''self'' if they support the '+' operation.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{2.3, 5.2} in c->sum()                               | 7.5           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{2, 4} in c->sum()                                   | 6             |
+
| Sequence{2.3, 5.2} in c->sum()
+---------------------------------------------------------------+----------------+
+
| 7.5
| Sequence{2, '4'} in c->sum()                                 | |invalid|     |
+
|-
+---------------------------------------------------------------+----------------+
+
| Sequence{2, 4} in c->sum()
 +
| 6
 +
|-
 +
| Sequence{2, '4'} in c->sum()
 +
| '''''invalid'''''
 +
|}
  
  
Line 913: Line 1,018:
  
 
=== = ( seq : Sequence(T) ) : Boolean ===
 
=== = ( seq : Sequence(T) ) : Boolean ===
Returns **true** if *self* contains the very same objects as *seq* in the very same order as they are in *seq*.
+
Returns '''true''' if ''self'' contains the very same objects as *seq* in the very same order as they are in *seq*.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{4, 5, 'test'} = Sequence{4, 5, 'test'}               | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{4, 5, 'test'} = Sequence{4, 'test', 5}               | false         |
+
| Sequence{4, 5, 'test'} = Sequence{4, 5, 'test'}
+---------------------------------------------------------------+----------------+
+
| true
| Sequence{4, 5, 'test', 5} = Sequence{4, 5, 'test'}           | false         |
+
|-
+---------------------------------------------------------------+----------------+
+
| Sequence{4, 5, 'test'} = Sequence{4, 'test', 5}
 +
| false
 +
|-
 +
| Sequence{4, 5, 'test', 5} = Sequence{4, 5, 'test'}
 +
| false
 +
|}
  
 
 
 
=== <> ( seq : Sequence(T) ) : Boolean ===
 
=== <> ( seq : Sequence(T) ) : Boolean ===
Returns **true** if *self* does not contain the same objects as *seq*, or if these objects are not in the same order as they are in *seq*.
+
Returns '''true''' if ''self'' does not contain the same objects as *seq*, or if these objects are not in the same order as they are in *seq*.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{4, 5, 'test'} = Sequence{4, 5, 'test'}               | false         |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| Sequence{4, 5, 'test'} = Sequence{4, 'test', 5}               | true           |
+
| Sequence{4, 5, 'test'} = Sequence{4, 5, 'test'}
+---------------------------------------------------------------+----------------+
+
| false
| Sequence{4, 5, 'test', 5} = Sequence{4, 5, 'test'}           | true           |
+
|-
+---------------------------------------------------------------+----------------+
+
| Sequence{4, 5, 'test'} = Sequence{4, 'test', 5}
 +
| true
 +
|-
 +
| Sequence{4, 5, 'test', 5} = Sequence{4, 5, 'test'}
 +
| true
 +
|}
  
  
 
=== append ( object : T ) : Sequence(T) ===
 
=== append ( object : T ) : Sequence(T) ===
Returns a Sequence containing all elements of *self* followed by *object*.
+
Returns a Sequence containing all elements of ''self'' followed by ''object''.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b'}->append('c')                     | Sequence{'a', 'b', 'c'} |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{'a', 'b'}->append('c')
 +
| Sequence{'a', 'b', 'c'}
 +
|}
  
  
 
=== at ( index : Integer ) : T ===
 
=== at ( index : Integer ) : T ===
Returns the element of *self* at the *index* position.
+
Returns the element of ''self'' at the *index* position.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b'}->at(1)                           | a                       |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{'a', 'b'}->at(1)
 +
| a
 +
|}
  
  
 
=== first () : T ===
 
=== first () : T ===
Returns the first element of *self*.
+
Returns the first element of ''self''.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{1, 2.0, '3'}->first()                     | 1                       |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{1, 2.0, '3'}->first()
 +
| 1
 +
|}
  
  
 
=== indexOf ( object : T ) : Integer ===
 
=== indexOf ( object : T ) : Integer ===
Returns the position of *object* in sequence *self*.
+
Returns the position of ''object'' in sequence ''self''.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b'}->indexOf('a')                   | 1                       |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{'a', 'b'}->indexOf('a')
 +
| 1
 +
|}
  
  
 
=== insertAt ( index : Integer, object : T) : Sequence(T) ===
 
=== insertAt ( index : Integer, object : T) : Sequence(T) ===
Returns a Sequence containing *self* with *object* inserted at the *index* position.
+
Returns a Sequence containing ''self'' with ''object'' inserted at the *index* position.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
|Sequence{'a', 'b'}->insertAt(0, 'c')                 | |invalid|               |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
|Sequence{'a', 'b'}->insertAt(1, 'c')                 | Sequence{'c', 'a', 'b'} |
+
| Sequence{'a', 'b'}->insertAt(0, 'c')
+-----------------------------------------------------+-------------------------+
+
| '''''invalid'''''
|Sequence{'a', 'b'}->insertAt(3, 'c')                 | Sequence{'a', 'b', 'c'} |
+
|-
+-----------------------------------------------------+-------------------------+
+
| Sequence{'a', 'b'}->insertAt(1, 'c')
|Sequence{'a', 'b'}->insertAt(4, 'c')                 | |invalid|               |
+
| Sequence{'c', 'a', 'b'}
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{'a', 'b'}->insertAt(3, 'c')
 +
| Sequence{'a', 'b', 'c'}
 +
|-
 +
| Sequence{'a', 'b'}->insertAt(4, 'c')
 +
| '''''invalid'''''
 +
|}
  
  
 
=== last () : T ===
 
=== last () : T ===
Returns the last element of *self*.
+
Returns the last element of ''self''.
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{1, 2.0, '3'}->last()                       | '3'                     |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{1, 2.0, '3'}->last()
 +
| '3'
 +
|}
  
  
 
=== prepend ( object : T ) : Sequence(T) ===
 
=== prepend ( object : T ) : Sequence(T) ===
Returns a Sequence containing *object* followed by all elements of *self* .
+
Returns a Sequence containing ''object'' followed by all elements of ''self'' .
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b'}->prepend('c')                   | Sequence{'c', 'a', 'b'} |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
 +
| Sequence{'a', 'b'}->prepend('c')
 +
| Sequence{'c', 'a', 'b'}
 +
|}
  
  
 
=== subSequence ( startIndex : Integer, endIndex : Integer ) : Sequence(T) ===
 
=== subSequence ( startIndex : Integer, endIndex : Integer ) : Sequence(T) ===
Returns a Sequence containing all elements of *self* between the positions 'startIndex' and 'endIndex'.  
+
Returns a Sequence containing all elements of ''self'' between the positions 'startIndex' and 'endIndex'.  
+
 
+-----------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                  |
+
|-
+=====================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b', 'c', 'd'}->subSequence(2, 3)     | Sequence{'b', 'c'}     |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-------------------------+
+
|-
| Sequence{'a', 'b', 'c', 'd'}->subSequence(4, 4)     | Sequence{'d'}           |
+
| Sequence{'a', 'b', 'c', 'd'}->subSequence(2, 3)
+-----------------------------------------------------+-------------------------+
+
| Sequence{'b', 'c'}
 +
|-
 +
| Sequence{'a', 'b', 'c', 'd'}->subSequence(4, 4)
 +
| Sequence{'d'}
 +
|}
  
  
 
=== union ( seq : Sequence(T) ) : Sequence(T) ===
 
=== union ( seq : Sequence(T) ) : Sequence(T) ===
Returns a Sequence containing all elements of *self* followed by all elements of *seq*.
+
Returns a Sequence containing all elements of ''self'' followed by all elements of *seq*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Sequence{'a', 'b', 'a'}->union(Sequence{'b', 'c'}) | Sequence{'a', 'b', 'a', 'b', 'c'} |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| Sequence{'a', 'b', 'a'}->union(Sequence{'b', 'c'})
 +
| Sequence{'a', 'b', 'a', 'b', 'c'}
 +
|}
  
  
Line 1,041: Line 1,187:
  
 
=== = ( bag : Bag(T) ) : Boolean ===
 
=== = ( bag : Bag(T) ) : Boolean ===
Returns **true** if *self* contains the same objects as *bag* in the same quantities.
+
Returns '''true''' if ''self'' contains the same objects as *bag* in the same quantities.
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| Bag{4, 5, 'test', 4} = Bag{4, 'test', 5, 4}                  | true          |
+
+---------------------------------------------------------------+----------------+
+
| Bag{4, 5, 'test'} = Bag{4, 'test', 5}                        | true          |
+
+---------------------------------------------------------------+----------------+
+
| Bag{4, 5, 'test', 5} = Bag{4, 5, 'test'}                      | false          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Bag{4, 5, 'test', 4} = Bag{4, 'test', 5, 4}
 +
| true
 +
|-
 +
| Bag{4, 5, 'test'} = Bag{4, 'test', 5}
 +
| true
 +
|-
 +
| Bag{4, 5, 'test', 5} = Bag{4, 5, 'test'}
 +
| false
 +
|}
  
  
 
=== <> ( bag : Bag(T) ) : Boolean ===
 
=== <> ( bag : Bag(T) ) : Boolean ===
Returns **true** if *self* does not contain the same objects as *bag* in the same quantities.
+
Returns '''true''' if ''self'' does not contain the same objects as *bag* in the same quantities.
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| Bag{4, 5, 'test'} = Bag{4, 5, 'test'}                        | false          |
+
+---------------------------------------------------------------+----------------+
+
| Bag{4, 5, 'test'} = Bag{4, 'test', 5}                        | false          |
+
+---------------------------------------------------------------+----------------+
+
| Bag{4, 5, 'test', 5} = Bag{4, 5, 'test'}                      | true          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Bag{4, 5, 'test'} = Bag{4, 5, 'test'}
 +
| false
 +
|-
 +
| Bag{4, 5, 'test'} = Bag{4, 'test', 5}
 +
| false
 +
|-
 +
| Bag{4, 5, 'test', 5} = Bag{4, 5, 'test'}
 +
| true
 +
|}
  
  
 
=== intersection ( bag : Bag(T) ) : Bag(T) ===
 
=== intersection ( bag : Bag(T) ) : Bag(T) ===
Returns a Bag containing all elements of *self* that are also contained by *bag*.
+
Returns a Bag containing all elements of ''self'' that are also contained by *bag*.
+
 
+-----------------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                | Result                            |
+
|-
+===========================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Bag{'a', 'b', 'a'}->intersection(Bag{'a', 'b'})           | Bag{'a', 'b'}                     |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------------+-----------------------------------+
+
|-
| Bag{'a', 'b', 'a', 'b'}->intersection(Bag{'a', 'b', 'b'}) | Bag{'b', 'a', 'b'}               |
+
| Bag{'a', 'b', 'a'}->intersection(Bag{'a', 'b'})
+-----------------------------------------------------------+-----------------------------------+
+
| Bag{'a', 'b'}
 +
|-
 +
| Bag{'a', 'b', 'a', 'b'}->intersection(Bag{'a', 'b', 'b'})
 +
| Bag{'b', 'a', 'b'}
 +
|}
  
 
 
 
=== intersection ( set : Set(T) ) : Set(T) ===
 
=== intersection ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* that are also contained by *set*.
+
Returns a Set containing all elements of ''self'' that are also contained by *set*.
+
 
+----------------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                              | Result                            |
+
|-
+==========================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Bag{'a', 'b', 'a'}->intersection(Set{'a', 'b', 'c'})     | Set{'a', 'b'}                     |
+
! style="background: #BCBCBC;" align="center"| Result
+----------------------------------------------------------+-----------------------------------+
+
|-
 +
| Bag{'a', 'b', 'a'}->intersection(Set{'a', 'b', 'c'})
 +
| Set{'a', 'b'}
 +
|}
  
  
 
=== union ( bag : Bag(T) ) : Bag(T) ===
 
=== union ( bag : Bag(T) ) : Bag(T) ===
Returns a Bag containing all elements of *self* and all elements of *bag*.
+
Returns a Bag containing all elements of ''self'' and all elements of *bag*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Bag{'a', 'b', 'a'}->union(Bag{'b', 'c'})           | Bag{'b', 'a', 'b', 'a', 'c'}     |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| Bag{'a', 'b', 'a'}->union(Bag{'b', 'c'})
 +
| Bag{'b', 'a', 'b', 'a', 'c'}
 +
|}
  
  
 
=== union ( set : Set(T) ) : Bag(T) ===
 
=== union ( set : Set(T) ) : Bag(T) ===
Returns a Bag containing all elements of *self* and all elements of *set*.
+
Returns a Bag containing all elements of ''self'' and all elements of *set*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Bag{'a', 'b', 'a'}->union(Set{'b', 'c'})           | Bag{'b', 'c', 'a', 'b', 'a'}     |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| Bag{'a', 'b', 'a'}->union(Set{'b', 'c'})
 +
| Bag{'b', 'c', 'a', 'b', 'a'}
 +
|}
  
  
 
== Ocl operations for type *OrderedSet* ==
 
== Ocl operations for type *OrderedSet* ==
 
=== = ( set : Set(T) ) : Boolean ===
 
=== = ( set : Set(T) ) : Boolean ===
Returns **true** if *self* contains the same objects as *set*.
+
Returns '''true''' if ''self'' contains the same objects as *set*.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{3, 5, 4} = Set{3, 5, 4}                           | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| OrderedSet{3, 5, 4} = Set{4, 3, 5, 4, 4}                     | true           |
+
| OrderedSet{3, 5, 4} = Set{3, 5, 4}
+---------------------------------------------------------------+----------------+
+
| true
| OrderedSet{3, 5, 4} = Set{2, 5 ,4, 4}                         | false         |
+
|-
+---------------------------------------------------------------+----------------+
+
| OrderedSet{3, 5, 4} = Set{4, 3, 5, 4, 4}
 +
| true
 +
|-
 +
| OrderedSet{3, 5, 4} = Set{2, 5 ,4, 4}
 +
| false
 +
|}
 +
 
 
 
 
=== = ( orderedset : OrderedSet(T) ) : Boolean ===
 
=== = ( orderedset : OrderedSet(T) ) : Boolean ===
Returns **true** if *self* contains the same objects as *orderedset* regardless of element ordering.
+
Returns '''true''' if ''self'' contains the same objects as *orderedset* regardless of element ordering.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{3, 5, 4} = OrderedSet{3, 5, 4}                     | true           |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| OrderedSet{4, 5, 'test', 5} = OrderedSet{4, 5, 'test'}       | true           |
+
| OrderedSet{3, 5, 4} = OrderedSet{3, 5, 4}
+---------------------------------------------------------------+----------------+
+
| true
| OrderedSet{4, 5, 'test'} = OrderedSet{4, 'test', 5}           | true           |
+
|-
+---------------------------------------------------------------+----------------+
+
| OrderedSet{4, 5, 'test', 5} = OrderedSet{4, 5, 'test'}
| OrderedSet{4, 5, 'test'} = OrderedSet{4, 'test'}             | false         |
+
| true
+---------------------------------------------------------------+----------------+
+
|-
 +
| OrderedSet{4, 5, 'test'} = OrderedSet{4, 'test', 5}
 +
| true
 +
|-
 +
| OrderedSet{4, 5, 'test'} = OrderedSet{4, 'test'}
 +
| false
 +
|}
  
  
 
=== <> ( set : Set(T) ) : Boolean ===
 
=== <> ( set : Set(T) ) : Boolean ===
Returns **true** if *self* does not contain the same objects as *set*.
+
Returns '''true''' if ''self'' does not contain the same objects as *set*.
+
 
+---------------------------------------------------------------+----------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                    | Result        |
+
|-
+===============================================================+================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{4, 5, 'test', 4} <> Set{4, 5, 'test'}             | false         |
+
! style="background: #BCBCBC;" align="center"| Result
+---------------------------------------------------------------+----------------+
+
|-
| OrderedSet{4, 5, 'test', 4} <> Set{4, 'test', 5, 4}           | false         |
+
| OrderedSet{4, 5, 'test', 4} <> Set{4, 5, 'test'}
+---------------------------------------------------------------+----------------+
+
| false
| OrderedSet{4, 5, 'test', 4} <> Set{4, 5, 'test', 2}           | true           |
+
|-
+---------------------------------------------------------------+----------------+
+
| OrderedSet{4, 5, 'test', 4} <> Set{4, 'test', 5, 4}
 +
| false
 +
|-
 +
| OrderedSet{4, 5, 'test', 4} <> Set{4, 5, 'test', 2}
 +
| true
 +
|}
  
  
 
=== <> ( orderedset : OrderedSet(T) ) : Boolean ===
 
=== <> ( orderedset : OrderedSet(T) ) : Boolean ===
Returns **true** if *self* does not contain the same objects as *orderedset*.
+
Returns '''true''' if ''self'' does not contain the same objects as *orderedset*.
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 5, 'test')      | false          |
+
+---------------------------------------------------------------+----------------+
+
| OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 'test', 5, 4}    | false          |
+
+---------------------------------------------------------------+----------------+
+
| OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 5, 'test', 2}    | true          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 5, 'test')
 +
| false
 +
|-
 +
| OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 'test', 5, 4}
 +
| false
 +
|-
 +
| OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 5, 'test', 2}
 +
| true
 +
|}
  
  
 
=== `-` ( set : Set(T) ) : Set(T) ===
 
=== `-` ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* minus all elements of *set*.
+
Returns a Set containing all elements of ''self'' minus all elements of *set*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{'a', 'b', 'c'} - Set{'c', 'a'}           | Set{'b'}                         |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| OrderedSet{'a', 'b', 'c'} - Set{'c', 'a'}
 +
| Set{'b'}
 +
|}
  
  
 
=== append ( object : T ) : OrderedSet(T) ===
 
=== append ( object : T ) : OrderedSet(T) ===
Returns an OrderedSet containing all elements of *self* followed by *object*.
+
Returns an OrderedSet containing all elements of ''self'' followed by ''object''.
+
+-----------------------------------------------------+---------------------------+
+
| Expression                                          | Result                    |
+
+=====================================================+===========================+
+
| OrderedSet{'a', 'b'}->append('c')                  | OrderedSet{'a', 'b', 'c'} |
+
+-----------------------------------------------------+---------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'a', 'b'}->append('c')
 +
| OrderedSet{'a', 'b', 'c'}
 +
|}
  
  
 
=== at ( index : Integer ) : T ===
 
=== at ( index : Integer ) : T ===
Returns the element of *self* located at position *index* in the collection.
+
Returns the element of ''self'' located at position *index* in the collection.
+
+-----------------------------------------------------+-------------------------+
+
| Expression                                          | Result                  |
+
+=====================================================+=========================+
+
| OrderedSet{'a', 'b'}->at(1)                        | 'a'                    |
+
+-----------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'a', 'b'}->at(1)
 +
| 'a'
 +
|}
  
  
 
=== first () : T ===
 
=== first () : T ===
Returns the first element of *self*.
+
Returns the first element of ''self''.
+
+-----------------------------------------------------+-------------------------+
+
| Expression                                          | Result                  |
+
+=====================================================+=========================+
+
| OrderedSet{1, 2.0, '3'}->first()                    | 1                      |
+
+-----------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{1, 2.0, '3'}->first()
 +
| 1
 +
|}
  
  
 
=== indexOf ( object : T ) : Integer ===
 
=== indexOf ( object : T ) : Integer ===
Returns the position of *object* in *self*.
+
Returns the position of ''object'' in ''self''.
+
+-----------------------------------------------------+-------------------------+
+
| Expression                                          | Result                  |
+
+=====================================================+=========================+
+
| OrderedSet{'a', 'b'}->indexOf('a')                  | 1                      |
+
+-----------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'a', 'b'}->indexOf('a')
 +
| 1
 +
|}
  
  
 
=== insertAt ( index : Integer, object : T ) : OrderedSet(T) ===
 
=== insertAt ( index : Integer, object : T ) : OrderedSet(T) ===
Returns an OrderedSet containing *self* with *object* inserted at the *index* position.
+
Returns an OrderedSet containing ''self'' with ''object'' inserted at the *index* position.
+
+-----------------------------------------------------+---------------------------+
+
| Expression                                          | Result                    |
+
+=====================================================+===========================+
+
| OrderedSet{'a', 'b'}->insertAt(1, 'c')              | OrderedSet{'c', 'a', 'b'} |
+
+-----------------------------------------------------+---------------------------+
+
| OrderedSet{'a', 'b'}->insertAt(3, 'c')              | OrderedSet{'a', 'b', 'c'} |
+
+-----------------------------------------------------+---------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'a', 'b'}->insertAt(1, 'c')
 +
| OrderedSet{'c', 'a', 'b'}
 +
|-
 +
| OrderedSet{'a', 'b'}->insertAt(3, 'c')
 +
| OrderedSet{'a', 'b', 'c'}
 +
|}
  
  
 
=== intersection ( bag : Bag(T) ) : Set(T) ===
 
=== intersection ( bag : Bag(T) ) : Set(T) ===
Returns a Set containing all elements of *self* that are also contained by *bag*.
+
Returns a Set containing all elements of ''self'' that are also contained by *bag*.
+
 
+--------------------------------------------------------+--------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                            | Result                        |
+
|-
+========================================================+================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{'a', 'b', 'a'}->intersection(Bag{'a', 'b'}) | Set{'a', 'b'}                 |
+
! style="background: #BCBCBC;" align="center"| Result
+--------------------------------------------------------+--------------------------------+
+
|-
 +
| OrderedSet{'a', 'b', 'a'}->intersection(Bag{'a', 'b'})
 +
| Set{'a', 'b'}
 +
|}
  
  
 
=== intersection ( set : Set(T) ) : Set(T) ===
 
=== intersection ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* that are also contained by *set*.
+
Returns a Set containing all elements of ''self'' that are also contained by *set*.
+
 
+--------------------------------------------------------+--------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                            | Result                        |
+
|-
+========================================================+================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{'a', 'b', 'a'}->intersection(Set{'a', 'b'}) | Set{'b', 'a'}                 |
+
! style="background: #BCBCBC;" align="center"| Result
+--------------------------------------------------------+--------------------------------+
+
|-
 +
| OrderedSet{'a', 'b', 'a'}->intersection(Set{'a', 'b'})
 +
| Set{'a', 'b'}
 +
|}
  
  
 
=== last () : T ===
 
=== last () : T ===
Returns the last element of *self*.
+
Returns the last element of ''self''.
+
+-----------------------------------------------------+-------------------------+
+
| Expression                                          | Result                  |
+
+=====================================================+=========================+
+
|OrderedSet{1, 2.0, '3'}->last()                      | '3'                     |
+
+-----------------------------------------------------+-------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{1, 2.0, '3'}->last()
 +
| '3'
 +
|}
  
  
 
=== prepend ( object : T ) : OrderedSet(T) ===
 
=== prepend ( object : T ) : OrderedSet(T) ===
Returns an OrderedSet containing *object* followed by all elements of *self*.
+
Returns an OrderedSet containing ''object'' followed by all elements of ''self''.
+
+-----------------------------------------------------+---------------------------+
+
| Expression                                          | Result                    |
+
+=====================================================+===========================+
+
| OrderedSet{'a', 'b'}->prepend('c')                  | OrderedSet{'c', 'a', 'b'} |
+
+-----------------------------------------------------+---------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'a', 'b'}->prepend('c')
 +
| OrderedSet{'c', 'a', 'b'}
 +
|}
  
  
 
=== subOrderedSet ( startIndex : Integer, endIndex : Integer ) : OrderedSet(T) ===
 
=== subOrderedSet ( startIndex : Integer, endIndex : Integer ) : OrderedSet(T) ===
Returns an OrderedSet containing all elements of *self* between the positions *startIndex* and *endIndex*.
+
Returns an OrderedSet containing all elements of ''self'' between the positions *startIndex* and *endIndex*.
+
+-----------------------------------------------------+---------------------------+
+
| Expression                                          | Result                    |
+
+=====================================================+===========================+
+
| OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3) | OrderedSet{'b', 'c'}      |
+
+-----------------------------------------------------+---------------------------+
+
| OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(4, 4) | OrderedSet{'d'}          |
+
+-----------------------------------------------------+---------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3)
 +
| OrderedSet{'b', 'c'}
 +
|-
 +
| OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(4, 4)
 +
| OrderedSet{'d'}
 +
|}
  
  
 
=== symmetricDifference ( set : Set(T) ) : Set(T) ===
 
=== symmetricDifference ( set : Set(T) ) : Set(T) ===
Returns a Set containing all of the elements of *self* and *set* that are not present in both.
+
Returns a Set containing all of the elements of ''self'' and *set* that are not present in both.
+
+-------------------------------------------------------------------------+---------------+
+
| Expression                                                              | Result        |
+
+=========================================================================+===============+
+
| OrderedSet{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'}) | Set{'d', 'b'} |
+
+-------------------------------------------------------------------------+---------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| OrderedSet{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'})
 +
| Set{'d', 'b'}
 +
|}
  
  
 
=== union ( bag : Bag(T) ) : Bag(T) ===
 
=== union ( bag : Bag(T) ) : Bag(T) ===
Returns a Bag containing all elements of *self* followed by all elements of *bag*.
+
Returns a Bag containing all elements of ''self'' followed by all elements of *bag*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{'a', 'b', 'a'}->union(Bag{'b', 'c'})     | Bag{'a', 'c', 'b', 'b'}           |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| OrderedSet{'a', 'b', 'a'}->union(Bag{'b', 'c'})
 +
| Bag{'a', 'c', 'b', 'b'}
 +
|}
  
  
 
=== union ( set : Set(T) ) : Set(T) ===
 
=== union ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* followed by all elements of *set*.
+
Returns a Set containing all elements of ''self'' followed by all elements of *set*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| OrderedSet{'a', 'b', 'a'}->union(Set{'b', 'c'})     | Set{'a', 'c', 'b'}               |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| OrderedSet{'a', 'b', 'a'}->union(Set{'b', 'c'})
 +
| Set{'a', 'c', 'b'}
 +
|}
  
  
Line 1,327: Line 1,550:
  
 
=== = ( set : Set(T) ) : Boolean ===
 
=== = ( set : Set(T) ) : Boolean ===
Returns **true** if *self* contains the same objects as *set*.
+
Returns '''true''' if ''self'' contains the same objects as *set*.
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| Set{3, 5, 4} = Set{3, 5, 4}                                  | true          |
+
+---------------------------------------------------------------+----------------+
+
| Set{3, 5, 4} = Set{3, 4, 4, 5}                                | true          |
+
+---------------------------------------------------------------+----------------+
+
| Set{3, 5, 4} = Set{2, 3, 5, 4}                                | false          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Set{3, 5, 4} = Set{3, 5, 4}
 +
| true
 +
|-
 +
| Set{3, 5, 4} = Set{3, 4, 4, 5}
 +
| true
 +
|-
 +
| Set{3, 5, 4} = Set{2, 3, 5, 4}
 +
| false
 +
|}
  
  
 
=== <> ( set : Set(T) ) : Boolean ===
 
=== <> ( set : Set(T) ) : Boolean ===
Returns **true** if *self* does not contain the same objects as *set*.
+
Returns '''true''' if ''self'' does not contain the same objects as *set*.
+
+---------------------------------------------------------------+----------------+
+
| Expression                                                    | Result        |
+
+===============================================================+================+
+
| Set{4, 5, 'test', 4} <> Set{4, 5, 'test'}                    | false          |
+
+---------------------------------------------------------------+----------------+
+
| Set{4, 5, 'test', 4} <> Set{5, 4, 'test', 4}                  | false          |
+
+---------------------------------------------------------------+----------------+
+
| Set{4, 5, 'test', 4} <> Set{4, 'test', 5, 2}                  | true          |
+
+---------------------------------------------------------------+----------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Set{4, 5, 'test', 4} <> Set{4, 5, 'test'}
 +
| false
 +
|-
 +
| Set{4, 5, 'test', 4} <> Set{5, 4, 'test', 4}
 +
| false
 +
|-
 +
| Set{4, 5, 'test', 4} <> Set{4, 'test', 5, 2}
 +
| true
 +
|}
  
  
 
=== `-` ( set : Set(T) ) : Set(T) ===
 
=== `-` ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* minus all elements of *set*.
+
Returns a Set containing all elements of ''self'' minus all elements of *set*.
+
+-----------------------------------------------------+-----------------------------------+
+
| Expression                                          | Result                            |
+
+=====================================================+===================================+
+
| Set{'a', 'b', 'c'} - Set{'c', 'a'}                  | Set{'b'}                          |
+
+-----------------------------------------------------+-----------------------------------+
+
  
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|-
 +
! style="background: #BCBCBC;" align="center"| Expression
 +
! style="background: #BCBCBC;" align="center"| Result
 +
|-
 +
| Set{'a', 'b', 'c'} - Set{'c', 'a'}
 +
| Set{'b'}
 +
|}
  
  
 
=== intersection ( bag : Bag(T) ) : Set(T) ===
 
=== intersection ( bag : Bag(T) ) : Set(T) ===
Returns a Bag containing all elements of *self* that are also contained in *bag*.
+
Returns a Bag containing all elements of ''self'' that are also contained in *bag*.
+
 
+-------------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                            | Result                            |
+
|-
+=======================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Set{'a', 'b', 'a'}->intersection(Bag{'a', 'b', 'c'}) | Set{'a', 'b'}                     |
+
! style="background: #BCBCBC;" align="center"| Result
+-------------------------------------------------------+-----------------------------------+
+
|-
 +
| Set{'a', 'b', 'a'}->intersection(Bag{'a', 'b', 'c'})
 +
| Set{'a', 'b'}
 +
|}
  
  
 
=== intersection ( set : Set(T) ) : Set(T) ===
 
=== intersection ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* that are also contained in *set*.
+
Returns a Set containing all elements of ''self'' that are also contained in *set*.
+
 
+-------------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                            | Result                            |
+
|-
+=======================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Set{'a', 'b', 'a'}->intersection(Set{'a', 'b', 'c'}) | Set{'b', 'a'}                     |
+
! style="background: #BCBCBC;" align="center"| Result
+-------------------------------------------------------+-----------------------------------+
+
|-
 +
| Set{'a', 'b', 'a'}->intersection(Set{'a', 'b', 'c'})
 +
| Set{'b', 'a'}
 +
|}
  
  
 
=== symmetricDifference ( set : Set(T) ) : Set(T) ===
 
=== symmetricDifference ( set : Set(T) ) : Set(T) ===
Returns a Set containing all of the elements of *self* and *set* that are not present in both.
+
Returns a Set containing all of the elements of ''self'' and *set* that are not present in both.
+
 
+------------------------------------------------------------------+-------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                                      | Result                  |
+
|-
+==================================================================+=========================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Set{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'}) | Set{'b', 'd'}           |
+
! style="background: #BCBCBC;" align="center"| Result
+------------------------------------------------------------------+-------------------------+
+
|-
 +
| Set{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'})
 +
| Set{'b', 'd'}
 +
|}
  
  
 
=== union ( bag : Bag(T) ) : Bag(T) ===
 
=== union ( bag : Bag(T) ) : Bag(T) ===
Returns a Bag containing all elements of *self* and all elements of *bag*.
+
Returns a Bag containing all elements of ''self'' and all elements of *bag*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Set{'a', 'b', 'a'}->union(Bag{'b', 'c'})           | Bag{'a', 'c', 'b', 'b'}           |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| Set{'a', 'b', 'a'}->union(Bag{'b', 'c'})
 +
| Bag{'a', 'c', 'b', 'b'}
 +
|}
  
  
 
=== union ( set : Set(T) ) : Set(T) ===
 
=== union ( set : Set(T) ) : Set(T) ===
Returns a Set containing all elements of *self* and all elements of *set*.
+
Returns a Set containing all elements of ''self'' and all elements of *set*.
+
 
+-----------------------------------------------------+-----------------------------------+
+
{| border="1" cellpadding="5" cellspacing="0"
| Expression                                          | Result                            |
+
|-
+=====================================================+===================================+
+
! style="background: #BCBCBC;" align="center"| Expression
| Set{'a', 'b', 'a'}->union(Set{'b', 'c'})           | Set{'a', 'c', 'b'}               |
+
! style="background: #BCBCBC;" align="center"| Result
+-----------------------------------------------------+-----------------------------------+
+
|-
 +
| Set{'a', 'b', 'a'}->union(Set{'b', 'c'})
 +
| Set{'a', 'c', 'b'}
 +
|}
  
  
Line 1,428: Line 1,676:
 
! style="background: #BCBCBC;" align="center"| Invalid
 
! style="background: #BCBCBC;" align="center"| Invalid
 
|-
 
|-
| true
+
! style="background: #BCBCBC;" align="center"| True
 
| true
 
| true
 
| false
 
| false
 
| true
 
| true
 
|-
 
|-
| false
+
! style="background: #BCBCBC;" align="center"| False
 
| false
 
| false
 
| false
 
| false
 
| false
 
| false
 
|-
 
|-
| invalid
+
! style="background: #BCBCBC;" align="center"| Invalid
 
| invalid
 
| invalid
 
| false
 
| false
 
| invalid
 
| invalid
 
|}
 
|}
 
  
 
=== Implies ===
 
=== Implies ===
  
.. list-table::
+
{| border="1" cellpadding="5" cellspacing="0"
:class: truthtable
+
|-
:header-rows: 1
+
! style="background: #BCBCBC;" align="center"| Implies
:stub-columns: 1
+
! style="background: #BCBCBC;" align="center"| True
         
+
! style="background: #BCBCBC;" align="center"| False
* - Implies
+
! style="background: #BCBCBC;" align="center"| Invalid
  - true
+
|-
  - false
+
! style="background: #BCBCBC;" align="center"| True
  - |invalid|
+
| true
* - true
+
| false
  - true
+
| invalid
  - false
+
|-
  - |invalid|
+
! style="background: #BCBCBC;" align="center"| False
* - false
+
| true
  - true
+
| true
  - true
+
| true
  - true
+
|-
* - |invalid|
+
! style="background: #BCBCBC;" align="center"| Invalid
  - true
+
| true
  - |invalid|
+
| invalid
  - |invalid|
+
| invalid
 +
|}
  
  
 
=== Or ===
 
=== Or ===
+
 
.. list-table::
+
{| border="1" cellpadding="5" cellspacing="0"
:class: truthtable
+
|-
:header-rows: 1
+
! style="background: #BCBCBC;" align="center"| Or
:stub-columns: 1
+
! style="background: #BCBCBC;" align="center"| True
+
! style="background: #BCBCBC;" align="center"| False
* - Or
+
! style="background: #BCBCBC;" align="center"| Invalid
  - true
+
|-
  - false
+
! style="background: #BCBCBC;" align="center"| True
  - |invalid|
+
| true
* - true
+
| true
  - true
+
| true
  - true
+
|-
  - true
+
! style="background: #BCBCBC;" align="center"| False
* - false
+
| true
  - true
+
| false
  - false
+
| invalid
  - |invalid|
+
|-
* - |invalid|
+
! style="background: #BCBCBC;" align="center"| Invalid
  - true
+
| true
  - |invalid|
+
| invalid
  - |invalid|
+
| invalid
 +
|}
  
  
 
=== Not ===
 
=== Not ===
.. list-table::
+
{| border="1" cellpadding="5" cellspacing="0"
:class: truthtable
+
|-
:header-rows: 1
+
! style="background: #BCBCBC;" align="center"| Not
:stub-columns: 1
+
! style="background: #BCBCBC;" align="center"| Result
 
+
|-
* - Not
+
! style="background: #BCBCBC;" align="center"| True
  - Result
+
| false
* - true
+
|-
  - false
+
! style="background: #BCBCBC;" align="center"| False
* - false
+
| true
  - true
+
|-
* - |invalid|
+
! style="background: #BCBCBC;" align="center"| Invalid
  - |invalid|
+
| invalid
 
+
|}
  
  
 
=== Xor ===
 
=== Xor ===
  
.. list-table::
+
{| border="1" cellpadding="5" cellspacing="0"
:class: truthtable
+
|-
:header-rows: 1
+
! style="background: #BCBCBC;" align="center"| Xor
:stub-columns: 1
+
! style="background: #BCBCBC;" align="center"| True
         
+
! style="background: #BCBCBC;" align="center"| False
* - Xor
+
! style="background: #BCBCBC;" align="center"| Invalid
  - true
+
|-
  - false
+
! style="background: #BCBCBC;" align="center"| True
  - |invalid|
+
| false
* - true
+
| true
  - false
+
| invalid
  - true
+
|-
  - |invalid|
+
! style="background: #BCBCBC;" align="center"| False
* - false
+
| true
  - true
+
| false
  - false
+
| invalid
  - |invalid|
+
|-
* - |invalid|
+
! style="background: #BCBCBC;" align="center"| Invalid
  - |invalid|
+
| invalid
  - |invalid|
+
| invalid
  - |invalid|
+
| invalid
 +
|}
  
  

Latest revision as of 11:45, 1 April 2019

Contents

OCL operation reference

Ocl operations for type *Classifier*

allInstances () : Set{T}

Returns a Set containing all of the existing instances of the current classifier (along with instances of all its inherited classifiers).

Expression Result
let a : String = 'a', b : String = 'b', c : Integer = 2 in String.allInstances() Set{'a','b'}


Ocl operations for type *OclAny*

oclAsType ( typespec : Classifier ) : T

Returns self statically typed as typespec if it is an instance of this type. *Note* that this does not alter the runtime value of self, it only enables access to subtype operations. This operation allows users to cast self to another type.

Expression Result
aPerson.oclAsType(Employee) an object of Employee type


oclIsInvalid () : Boolean

Returns true if self is equal to *invalid*.

Expression Result
let anObject : String = null in anObject.oclIsInvalid() false
let anObject : String = invalid in anObject.oclIsInvalid() true
let anObject : String = 'null' in anObject.oclIsInvalid() false

oclIsKindOf( Classifier typespec ) : Boolean

Returns true if the type of self corresponds to the type or supertype of typespec, false otherwise. This operation allows users to check the class hierarchy of self much like would an instanceof Java.

Expression Result
anEmployee.oclIsKindOf(Employee) true
anEmployee.oclIsKindOf(Person) true
aCat.oclIsKindOf(Person) false


oclIsTypeOf( typespec : Classifier ) : Boolean

Returns true if the type of self is the same as typespec, or false otherwise. This operation allows users to check the exact class type of self.

Expression Result
anEmployee.oclIsTypeOf(Employee) true
anEmployee.oclIsTypeOf(Person) false
aCat.oclIsTypeOf(Person) false

oclIsUndefined () : Boolean

Returns true if self is equal to invalid or null.

Expression Result
let anObject : String = null in anObject.oclIsUndefined() true
let anObject : String = invalid in anObject.oclIsUndefined() true
let anObject : String = 'null' in anObject.oclIsUndefined() false

<> ( object : OclAny ) : Boolean

Returns true if self is a different object from object.

Expression Result
let a : String = 'a', b : String = 'a' in a <> b false
let a : Integer = 2, b : Real = 2.0 in a <> b false
let a : Integer = -2, b : Integer = 2 in a <> b true


= ( object : OclAny) : Boolean

Returns true if self is equal to object.

Expression Result
let a : String = 'a', b : String = 'a' in a = b true
let a : Integer = 2, b : Real = 2.0 in a = b true
let a : Integer = -2, b : Integer = 2 in a = b false


< ( object : T ) : Boolean

Returns true if self is comparable to object and less than object.

Expression Result
let a : Integer = 1, b : Integer = 2 in a < b true
let a : Real = 1.5, b : Integer = 2 in a < b true
let a : String = 'Anteater', b : String = 'Aardvark' in a < b false


> ( object : T ) : Boolean

Returns true if self is comparable to object and greater than object.

Expression Result
let a : Integer = 1, b : Integer = 2 in a > b false
let a : Real = 1.5, b : Integer = 2 in a > b false
let a : String = 'Anteater', b : String = 'Aardvark' in a > b true


<= ( object : T ) : Boolean

Returns true if self is comparable to object and less than or equal to object.

Expression Result
let a : Integer = 1, b : Integer = 2 in a <= b true
let a : Real = 1.5, b : Integer = 2 in a <= b true
let a : String = 'Anteater', b : String = 'Aardvark' in a <= b false


>= ( object : T ) : Boolean

Returns true if self is comparable to object and greater than or equal to object.

Expression Result
let a : Integer = 1, b : Integer = 2 in a >= b false
let a : Real = 1.5, b : Integer = 2 in a >= b false
let a : String = 'Anteater', b : String = 'Aardvark' in a >= b true


Ocl operations for type *String*

    • A note on Strings** : OCL Strings begin at index *1*, not *0* as in most languages. Thus *'test'.at(0)* fails in
  • invalid* whereas *'test'.at(1)* yields *'t'*. Likewise, *'test'.substring(2, 2)* returns *'e'*.

concat ( s : String ) : String

Returns a string containing self followed by *s*.

Expression Result
'concat'.concat(' ').concat('operation') 'concat operation'


size () : Integer

Returns the number of characters composing self.

Expression Result
'size operation'.size() 14


substring ( lower : Integer, upper : Integer ) : String

Returns a string containing all characters from self starting from index *lower* up to index *upper* included. Both *lower* and *upper* parameters should be contained between *1* and *self.size()* included. *lower* cannot be greater than *upper*.

Expression Result
'substring operation'.substring(11, 19) 'operation'
'substring operation'.substring(1, 1) 's'
'substring operation'.substring(0, 1) invalid


toInteger () : Integer

Returns an Integer of value equal to self, or |invalid| if self does not represent an integer.

Expression Result
'3.0'.toInteger() invalid
'4'.toInteger() 4
'toInteger'.toInteger() invalid


toLower () : String

Returns self with all characters converted to lowercase.

Expression Result
'LoWeR OpErAtIoN'.toLower() 'lower operation'


toReal () : Real

Returns a Real of value equal to self, or |invalid| if self does not represent a real.

Expression Result
'3.0'.toReal() 3.0
'4'.toReal() 4.0
'toReal'.toReal() invalid


toUpper () : String

Returns self with all characters converted to uppercase.

Expression Result
'UpPeR OpErAtIoN'.toUpper() 'UPPER OPERATION'


Ocl operations for type *Number*

In addition to the basic math functions (+, -, /, \*) are a number of advanced functions. Take note that *Number* denotes both *Integer* and *Real*, and they're substitutive unless otherwise specified.

Number::abs () : Number

Returns the absolute value of self, self if it is already a positive number.

Expression Result
(-2.3).abs() 2.3
-5.abs() 5


Number::floor () : Integer

Returns the integer part of self if it is a Real, self if it is an Integer.

Expression Result
(2.3).floor() 2
(2.8).floor() 2
2.floor() 2


Number::max ( r : Number ) : Number

Returns the greatest number between self and *r*.

Expression Result
6.max(3) 6
6.max(5.2) 6.0
(2.3).max(3) 3.0
(2.3).max(5.2) 5.2


Number::min ( r : Number ) : Number

Returns the lowest number between self and *r*.

Expression Result
6.min(3) 3
6.min(5.2) 5.2
(2.3).min(3) 2.3
(2.3).min(5.2) 2.3


Number::round () : Integer

Returns the nearest integer to self if it is a Real, self if it is an Integer.

Expression Result
(2.3).round() 2
(2.5).round() 3
(2.8).round() 3
2.round() 2


Integer::div ( i : Integer ) : Integer

Returns the integer quotient of the division of self by *i*.

Expression Result
3.div(2) 1
11.div(3) 3


Integer::mod ( i : Integer ) : Integer

Returns the integer remainder of the division of self by *i*.

Expression Result
3.mod(2) 1
11.mod(3) 2


Ocl operations for type *Collection*

Please note that OCL collections can contain the *null* value (null) but not the *invalid* value (|invalid|). Trying to add |invalid| within a new or existing collection will yield |invalid| as a result. OCL proposes four distinct kinds of collections offering all possibilities of ordering/unicity.


Collection type Ordered Unique
Sequence true false
OrderedSet true true
Bag false false
Set false true


any ( expr : OclExpression ) : T

Returns any element contained in self that validates the condition expr, null otherwise. Evaluation is shortcut as soon as an element validating expr is found. Note that the result of this on unordered collections will be random if more than one element validates expr.

Expression Result
Sequence{1.2, 2.3, 5.2, 0.9}->any(self < 1) 0.9
Sequence{1.2, 2.3, 5.2, 0.9}->any(self < 2) 1.2


asBag () : Bag(T)

Returns a Bag containing all elements of self.

Expression Result
Sequence{'3', 1, 2.0, '3'}->asBag() Bag{2.0, '3', 1, '3'}
Bag{1, 2.0, '3'}->asBag() Bag{2.0, 1, '3'}
OrderedSet{1, 2.0, '3'}->asBag() Bag{2.0, 1, '3'}
OrderedSet{1, 1, 2.0, '3'}->asBag() Bag{'3', 1, 2.0}
Set{1, 2.0, '3'}->asBag() Bag{2.0, 1, '3'}
Set{1, 1, 2.0, '3'}->asBag() Bag{2.0, '3', 1}


asOrderedSet () : OrderedSet(T)

Returns an OrderedSet containing all elements of self. Element ordering is preserved when possible.

Expression Result
Sequence{1, 2.0, '3'}->asOrderedSet() OrderedSet{1, '3', 2.0}
Sequence{1, 1, 2.0, '3'}->asOrderedSet() OrderedSet{'3', 1, 2.0}
Bag{1, 2.0, '3'}->asOrderedSet() OrderedSet{2.0, 1, '3'}
Bag{1, 1, 2.0, '3'}->asOrderedSet() OrderedSet{1, '3', 2.0}
OrderedSet{1, 2.0, '3'}->asOrderedSet() OrderedSet{1, 2.0, '3'}
Set{1, 2.0, '3'}->asOrderedSet() OrderedSet{'3', 1, 2.0}


asSequence () : Boolean

Returns a Sequence containing all elements of self. Element ordering is preserved when possible.

Expression Result
Sequence{1, 2.0, '3'}->asSequence() Sequence{1, 2.0, '3'}
Bag{1, 2.0, '3'}->asSequence() Sequence{2.0, 1, '3'}
OrderedSet{1, 2.0, '3'}->asSequence() Sequence{1, 2.0, '3'}
Set{1, 2.0, '3'}->asSequence() Sequence{'3', 1, 2.0}


asSet () : Set(T)

Returns a Set containing all elements of self.

Expression Result
Sequence{1, 2.0, '3'}->asSet() Set{1, '3', 2.0}
Sequence{1, 1, 2.0, '3'}->asSet() Set{'3', 1, 2.0}
Bag{1, 2.0, '3'}->asSet() Set{2.0, 1, '3'}
Bag{1, 1, 2.0, '3'}->asSet() Set{1, '3', 2.0}
OrderedSet{1, 2.0, '3'}->asSet() Set{1, '3', 2.0}
OrderedSet{1, 1, 2.0, '3'}->asSet() Set{'3', 1, 2.0}
Set{1, 2.0, '3'}->asSet() Set{2.0, 1, '3'}
Set{1, 1, 2.0, '3'}->asSet() Set{'3', 1, 2.0}


collect ( expr : OclExpression ) : Collection(T2)

Returns a collection containing the result of applying expr on all elements contained in self.

Expression Result
Sequence{'first', 'second'}->collect(toUpper()) Sequence{'FIRST', 'SECOND'}


collectNested ( expr : OclExpression ) : Collection(T2)

Returns a collection containing all the elements contained in self on which we applied the OclExpression expr. The results won't be flattened. The type of the resulting collection depends on the type of self.

For the purpose of these examples we'll assume here that we have a Class *Person* with a reference *children*. Our model contains two persons such as *person1.children = {James, Jane}* and *person2.children = {John}*.

Expression Result
self.persons->collectNested(children.firstname) Sequence{Sequence{James, Jane}, Sequence{John}}


count ( object : T ) : Integer

Returns how many times object is in the collection self.

Expression Result
Sequence{2.3, 5.2}->count(5.2) 1
Set{3, 'test', 4.0, 4, 4.0, 'test'}->count(null) 0
Set{3, null, 4.0, null, 'test'}->count(null) 1
Bag{3, null, 4.0, null, 'test'}->count(null) 2


excludes ( object : T ) : Boolean

Returns true if object is not contained in self, false otherwise.

Expression Result
Sequence{2.3}->excludes(2.1) true
Sequence{2.0}->excludes(2) false


excludesAll ( c2 : Collection(T) ) : Boolean

Returns true if no element of *c2* is contained in self, false otherwise.

Expression Result
Sequence{2.3, 5.2, 'a', 3, null}->excludesAll(Set{4, null}) false
Sequence{2.3, 5.2, 'a', 3}->excludesAll(Set{4, null}) true


excluding ( object : T ) : Collection(T)

Returns a collection containing all elements of self minus all occurences of object. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when excluding elements.

Expression Result
Sequence{'b', 'a', 'b', 'c'}->excluding('b') Sequence{'a', 'c'}
Bag{'b', 'a', 'b', 'c'}->excluding('b') Bag{'c', 'a'}
OrderedSet{'b', 'a', 'b', 'c'}->excluding('b') Set{'c', 'a'}
Set{'b', 'a', 'b', 'c'}->excluding('b') Set{'c', 'a'}


exists ( expr : OclExpression ) : Boolean

Returns true if at least one element in self validates the condition expr, false otherwise. The evaluation stops as soon as one element validating expr is found.

Expression Result
Sequence{2.3, 5.2}->exists(self > 3) true


flatten () : Collection(T2)

Returns a collection containing all elements of self recursively flattened. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when flattening.

Expression Result
Sequence{Set{1, 2, 3}, Sequence{2.0, 3.0}, Bag{'test'}}->flatten() Sequence{1, 2, 3, 2.0, 3.0, 'test'}
Bag{Set{Bag{'test', 2, 3.0}}, Sequence{OrderedSet{2.0, 3, 1}}}->flatten() Bag{1, 2, 3, 2.0, 3.0, 'test'}
OrderedSet{Set{Bag{'test', 2, 3.0}}, Sequence{Set{2.0, 3, 1}}}->flatten() Set{3.0, 2, 1, 3, 'test', 2.0}
Set{Set{Bag{'test', 2, 3.0}}, Sequence{OrderedSet{2.0, 3, 1}}}->flatten() Set{3.0, 2, 1, 3, 'test', 2.0}


forAll ( expr : OclExpression ) : Boolean

Returns true if the all the elements contained in self validate the condition expr, false otherwise.

Expression Result
Sequence{2.3, 5.2}->forAll(self > 3) false
Sequence{2.3, 5.2}->forAll(self > 1.2) true


includes ( object : T ) : Boolean

Returns true if object is contained in self, false otherwise.

Expression Result
Sequence{2.3}->includes(2.1) false
Sequence{2.0}->includes(2) true


includesAll ( c2 : Collection(T) ) : Boolean

Returns true if all element of *c2* are contained in self, false otherwise.

Expression Result
Sequence{2.3, 5.2, 'a', 3, null}->includesAll(Set{3, null}) true
Sequence{2.3, 5.2, 'a', 3}->includesAll(Set{3, null}) false


including ( object : T ) : Collection(T)

Returns a collection containing all elements of self followed by object. **Note** : at the time of writing, the OCL standard library sports a bug which changes *OrderedSets* in *Sets* when including elements.

Expression Result
Sequence{'a', 'b'}->including('c') Sequence{'a', 'b', 'c'}
Bag{'a', 'b'}->including('c') Bag{'a', 'c', 'b'}
OrderedSet{'a', 'b'}->including('c') Set{'a', 'c', 'b'}
Set{'a', 'b'}->including('c') Set{'a', 'c', 'b'}


isEmpty () : Boolean

Returns true if self is empty, false otherwise.

Expression Result
Sequence{2, 'a'}->isEmpty() false
Sequence{null}->isEmpty() false
Sequence{}->isEmpty() true


isUnique ( expr : OclExpression ) : Boolean

Returns true if all elements contained in self evaluate to a distinct value for expr.

Expression Result
Sequence{2.3, 5.2}->isUnique(self > 3) true
Sequence{2.3, 5.2}->isUnique(self > 1) false


notEmpty () : Boolean

Returns true if self contains at least one element, false otherwise.

Expression Result
Sequence{2, 'a'}->notEmpty() true
Sequence{null}->notEmpty() true
Sequence{}->notEmpty() false


one ( expr : OclExpression ) : Boolean

Returns true if there is only one element contained in self that validates the condition expr, false otherwise.

Expression Result
Sequence{1.2, 2.3, 5.2, 0.9}->one(self < 1) true
Sequence{1.2, 2.3, 5.2, 0.9}->one(self < 2) false


product ( c2 : Collection(T2) ) : Set(Tuple(first : T, second : T2))

Returns a Set of Tuples which represents the cartesian product of self with *c2*.

Expression Result
Sequence{3, 4}->product(Bag{3.0, 4.0}) Set{Tuple{3, 3.0}, Tuple{3, 4.0}, Tuple{4, 3.0}, Tuple{4, 4.0}}
Set{3, 4}->product(OrderedSet{3.0, 4.0}) Set{Tuple{3, 3.0}, Tuple{3, 4.0}, Tuple{4, 3.0}, Tuple{4, 4.0}}


reject ( expr : OclExpression ) : Collection(T)

Returns a collection with all elements of self except for those who validate the OclExpression expr.

Expression Result
Sequence{1, 2, 3}->reject(i : Integer | i > 1 ) Sequence{1}
Bag{1, 2, 3}->reject(i : Integer | i > 1 ) Bag{1}
OrderedSet{1, 2, 3}->reject(i : Integer | i > 1 ) OrderedSet{1}
Set{1, 2, 3}->reject(i : Integer | i > 1 ) Set{1}

select ( expr : OclExpression ) : Collection(T)

Returns a collection with all elements of self that validate the OclExpression expr.

Expression Result
Sequence{1, 2, 3}->select(i : Integer | i > 1) Sequence{2, 3}
Bag{1, 2, 3}->select(i : Integer | i > 1 ) Bag{3, 2}
OrderedSet{1, 2, 3}->select(i : Integer | i > 1 ) OrderedSet{2, 3}
Set{1, 2, 3}->select(i : Integer | i > 1 ) Set{3, 2}

size () : Integer

Returns the number of elements contained in self.

Expression Result
Sequence{2.3, 5}->size() 2
Sequence{}->size() 0


sortedBy ( expr : OclExpression ) : Sequence(T)

Returns a sorted collection containing all elements from self sorted in accordance with the OclExpression expr. This can be used on all kind of collections yet will always yield a Sequence-typed result except for OrderedSet which returns an OrderedSet.

For the purpose of these examples we'll assume here that we have a Class *Employee* with an attribute *age*. Our model contains two employees such as *employee1.age = 24* and *employee2.age = 27*.

Expression Result
self.employees->sortedBy(age) Sequence{employee1, employee2}


sum () : Real

Returns the sum of all elements contained in self if they support the '+' operation.

Expression Result
Sequence{2.3, 5.2} in c->sum() 7.5
Sequence{2, 4} in c->sum() 6
Sequence{2, '4'} in c->sum() invalid


Ocl operations for type *Sequence*

= ( seq : Sequence(T) ) : Boolean

Returns true if self contains the very same objects as *seq* in the very same order as they are in *seq*.

Expression Result
Sequence{4, 5, 'test'} = Sequence{4, 5, 'test'} true
Sequence{4, 5, 'test'} = Sequence{4, 'test', 5} false
Sequence{4, 5, 'test', 5} = Sequence{4, 5, 'test'} false


<> ( seq : Sequence(T) ) : Boolean

Returns true if self does not contain the same objects as *seq*, or if these objects are not in the same order as they are in *seq*.

Expression Result
Sequence{4, 5, 'test'} = Sequence{4, 5, 'test'} false
Sequence{4, 5, 'test'} = Sequence{4, 'test', 5} true
Sequence{4, 5, 'test', 5} = Sequence{4, 5, 'test'} true


append ( object : T ) : Sequence(T)

Returns a Sequence containing all elements of self followed by object.

Expression Result
Sequence{'a', 'b'}->append('c') Sequence{'a', 'b', 'c'}


at ( index : Integer ) : T

Returns the element of self at the *index* position.

Expression Result
Sequence{'a', 'b'}->at(1) a


first () : T

Returns the first element of self.

Expression Result
Sequence{1, 2.0, '3'}->first() 1


indexOf ( object : T ) : Integer

Returns the position of object in sequence self.

Expression Result
Sequence{'a', 'b'}->indexOf('a') 1


insertAt ( index : Integer, object : T) : Sequence(T)

Returns a Sequence containing self with object inserted at the *index* position.

Expression Result
Sequence{'a', 'b'}->insertAt(0, 'c') invalid
Sequence{'a', 'b'}->insertAt(1, 'c') Sequence{'c', 'a', 'b'}
Sequence{'a', 'b'}->insertAt(3, 'c') Sequence{'a', 'b', 'c'}
Sequence{'a', 'b'}->insertAt(4, 'c') invalid


last () : T

Returns the last element of self.

Expression Result
Sequence{1, 2.0, '3'}->last() '3'


prepend ( object : T ) : Sequence(T)

Returns a Sequence containing object followed by all elements of self .

Expression Result
Sequence{'a', 'b'}->prepend('c') Sequence{'c', 'a', 'b'}


subSequence ( startIndex : Integer, endIndex : Integer ) : Sequence(T)

Returns a Sequence containing all elements of self between the positions 'startIndex' and 'endIndex'.

Expression Result
Sequence{'a', 'b', 'c', 'd'}->subSequence(2, 3) Sequence{'b', 'c'}
Sequence{'a', 'b', 'c', 'd'}->subSequence(4, 4) Sequence{'d'}


union ( seq : Sequence(T) ) : Sequence(T)

Returns a Sequence containing all elements of self followed by all elements of *seq*.

Expression Result
Sequence{'a', 'b', 'a'}->union(Sequence{'b', 'c'}) Sequence{'a', 'b', 'a', 'b', 'c'}


Ocl operations for type *Bag*

= ( bag : Bag(T) ) : Boolean

Returns true if self contains the same objects as *bag* in the same quantities.

Expression Result
Bag{4, 5, 'test', 4} = Bag{4, 'test', 5, 4} true
Bag{4, 5, 'test'} = Bag{4, 'test', 5} true
Bag{4, 5, 'test', 5} = Bag{4, 5, 'test'} false


<> ( bag : Bag(T) ) : Boolean

Returns true if self does not contain the same objects as *bag* in the same quantities.

Expression Result
Bag{4, 5, 'test'} = Bag{4, 5, 'test'} false
Bag{4, 5, 'test'} = Bag{4, 'test', 5} false
Bag{4, 5, 'test', 5} = Bag{4, 5, 'test'} true


intersection ( bag : Bag(T) ) : Bag(T)

Returns a Bag containing all elements of self that are also contained by *bag*.

Expression Result
Bag{'a', 'b', 'a'}->intersection(Bag{'a', 'b'}) Bag{'a', 'b'}
Bag{'a', 'b', 'a', 'b'}->intersection(Bag{'a', 'b', 'b'}) Bag{'b', 'a', 'b'}


intersection ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self that are also contained by *set*.

Expression Result
Bag{'a', 'b', 'a'}->intersection(Set{'a', 'b', 'c'}) Set{'a', 'b'}


union ( bag : Bag(T) ) : Bag(T)

Returns a Bag containing all elements of self and all elements of *bag*.

Expression Result
Bag{'a', 'b', 'a'}->union(Bag{'b', 'c'}) Bag{'b', 'a', 'b', 'a', 'c'}


union ( set : Set(T) ) : Bag(T)

Returns a Bag containing all elements of self and all elements of *set*.

Expression Result
Bag{'a', 'b', 'a'}->union(Set{'b', 'c'}) Bag{'b', 'c', 'a', 'b', 'a'}


Ocl operations for type *OrderedSet*

= ( set : Set(T) ) : Boolean

Returns true if self contains the same objects as *set*.

Expression Result
OrderedSet{3, 5, 4} = Set{3, 5, 4} true
OrderedSet{3, 5, 4} = Set{4, 3, 5, 4, 4} true
OrderedSet{3, 5, 4} = Set{2, 5 ,4, 4} false


= ( orderedset : OrderedSet(T) ) : Boolean

Returns true if self contains the same objects as *orderedset* regardless of element ordering.

Expression Result
OrderedSet{3, 5, 4} = OrderedSet{3, 5, 4} true
OrderedSet{4, 5, 'test', 5} = OrderedSet{4, 5, 'test'} true
OrderedSet{4, 5, 'test'} = OrderedSet{4, 'test', 5} true
OrderedSet{4, 5, 'test'} = OrderedSet{4, 'test'} false


<> ( set : Set(T) ) : Boolean

Returns true if self does not contain the same objects as *set*.

Expression Result
OrderedSet{4, 5, 'test', 4} <> Set{4, 5, 'test'} false
OrderedSet{4, 5, 'test', 4} <> Set{4, 'test', 5, 4} false
OrderedSet{4, 5, 'test', 4} <> Set{4, 5, 'test', 2} true


<> ( orderedset : OrderedSet(T) ) : Boolean

Returns true if self does not contain the same objects as *orderedset*.

Expression Result
OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 5, 'test') false
OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 'test', 5, 4} false
OrderedSet{4, 5, 'test', 4} <> OrderedSet{4, 5, 'test', 2} true


`-` ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self minus all elements of *set*.

Expression Result
OrderedSet{'a', 'b', 'c'} - Set{'c', 'a'} Set{'b'}


append ( object : T ) : OrderedSet(T)

Returns an OrderedSet containing all elements of self followed by object.

Expression Result
OrderedSet{'a', 'b'}->append('c') OrderedSet{'a', 'b', 'c'}


at ( index : Integer ) : T

Returns the element of self located at position *index* in the collection.

Expression Result
OrderedSet{'a', 'b'}->at(1) 'a'


first () : T

Returns the first element of self.

Expression Result
OrderedSet{1, 2.0, '3'}->first() 1


indexOf ( object : T ) : Integer

Returns the position of object in self.

Expression Result
OrderedSet{'a', 'b'}->indexOf('a') 1


insertAt ( index : Integer, object : T ) : OrderedSet(T)

Returns an OrderedSet containing self with object inserted at the *index* position.

Expression Result
OrderedSet{'a', 'b'}->insertAt(1, 'c') OrderedSet{'c', 'a', 'b'}
OrderedSet{'a', 'b'}->insertAt(3, 'c') OrderedSet{'a', 'b', 'c'}


intersection ( bag : Bag(T) ) : Set(T)

Returns a Set containing all elements of self that are also contained by *bag*.

Expression Result
OrderedSet{'a', 'b', 'a'}->intersection(Bag{'a', 'b'}) Set{'a', 'b'}


intersection ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self that are also contained by *set*.

Expression Result
OrderedSet{'a', 'b', 'a'}->intersection(Set{'a', 'b'}) Set{'a', 'b'}


last () : T

Returns the last element of self.

Expression Result
OrderedSet{1, 2.0, '3'}->last() '3'


prepend ( object : T ) : OrderedSet(T)

Returns an OrderedSet containing object followed by all elements of self.

Expression Result
OrderedSet{'a', 'b'}->prepend('c') OrderedSet{'c', 'a', 'b'}


subOrderedSet ( startIndex : Integer, endIndex : Integer ) : OrderedSet(T)

Returns an OrderedSet containing all elements of self between the positions *startIndex* and *endIndex*.

Expression Result
OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(2, 3) OrderedSet{'b', 'c'}
OrderedSet{'a', 'b', 'c', 'd'}->subOrderedSet(4, 4) OrderedSet{'d'}


symmetricDifference ( set : Set(T) ) : Set(T)

Returns a Set containing all of the elements of self and *set* that are not present in both.

Expression Result
OrderedSet{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'}) Set{'d', 'b'}


union ( bag : Bag(T) ) : Bag(T)

Returns a Bag containing all elements of self followed by all elements of *bag*.

Expression Result
OrderedSet{'a', 'b', 'a'}->union(Bag{'b', 'c'}) Bag{'a', 'c', 'b', 'b'}


union ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self followed by all elements of *set*.

Expression Result
OrderedSet{'a', 'b', 'a'}->union(Set{'b', 'c'}) Set{'a', 'c', 'b'}


Ocl operations for type *Set*

= ( set : Set(T) ) : Boolean

Returns true if self contains the same objects as *set*.

Expression Result
Set{3, 5, 4} = Set{3, 5, 4} true
Set{3, 5, 4} = Set{3, 4, 4, 5} true
Set{3, 5, 4} = Set{2, 3, 5, 4} false


<> ( set : Set(T) ) : Boolean

Returns true if self does not contain the same objects as *set*.

Expression Result
Set{4, 5, 'test', 4} <> Set{4, 5, 'test'} false
Set{4, 5, 'test', 4} <> Set{5, 4, 'test', 4} false
Set{4, 5, 'test', 4} <> Set{4, 'test', 5, 2} true


`-` ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self minus all elements of *set*.

Expression Result
Set{'a', 'b', 'c'} - Set{'c', 'a'} Set{'b'}


intersection ( bag : Bag(T) ) : Set(T)

Returns a Bag containing all elements of self that are also contained in *bag*.

Expression Result
Set{'a', 'b', 'a'}->intersection(Bag{'a', 'b', 'c'}) Set{'a', 'b'}


intersection ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self that are also contained in *set*.

Expression Result
Set{'a', 'b', 'a'}->intersection(Set{'a', 'b', 'c'}) Set{'b', 'a'}


symmetricDifference ( set : Set(T) ) : Set(T)

Returns a Set containing all of the elements of self and *set* that are not present in both.

Expression Result
Set{'b', 'a', 'b', 'c'}->symmetricDifference(Set{'a', 'c', 'd'}) Set{'b', 'd'}


union ( bag : Bag(T) ) : Bag(T)

Returns a Bag containing all elements of self and all elements of *bag*.

Expression Result
Set{'a', 'b', 'a'}->union(Bag{'b', 'c'}) Bag{'a', 'c', 'b', 'b'}


union ( set : Set(T) ) : Set(T)

Returns a Set containing all elements of self and all elements of *set*.

Expression Result
Set{'a', 'b', 'a'}->union(Set{'b', 'c'}) Set{'a', 'c', 'b'}


Ocl operations for type *Boolean*

And

And True False Invalid
True true false true
False false false false
Invalid invalid false invalid

Implies

Implies True False Invalid
True true false invalid
False true true true
Invalid true invalid invalid


Or

Or True False Invalid
True true true true
False true false invalid
Invalid true invalid invalid


Not

Not Result
True false
False true
Invalid invalid


Xor

Xor True False Invalid
True false true invalid
False true false invalid
Invalid invalid invalid invalid



Acceleo Portal
Project Project · Installation
Features Acceleo Features · Runtime · Acceleo editor · Views & Perspective · Interpreter · Maven
User documentation Getting Started · User Guide · Acceleo operations reference · OCL operations reference · Text Production Rules · Migration From Acceleo 2.x · Best Practices · Videos · FAQ
Developer documentation Source code · How to contribute · Compatibility · MOFM2T specification · OCL specification
Community Professional Support · Report a bug

Back to the top