pike.git/
src/
operators.c
Branch:
Tag:
Non-build tags
All tags
No tags
2001-05-09
2001-05-09 16:37:49 by Henrik Grubbström (Grubba) <grubba@grubba.org>
28984ea230bcb91a35983198f631b2eb18f5f8f6 (
794
lines) (+
407
/-
387
)
[
Show
|
Annotate
]
Branch:
7.9
AutoDoc mk II markup fixes.
Rev: src/operators.c:1.135
6:
/**/ #include "global.h" #include <math.h>
-
RCSID("$Id: operators.c,v 1.
134
2001/
04
/
01
15
:
40
:
22
grubba Exp $");
+
RCSID("$Id: operators.c,v 1.
135
2001/
05
/
09
16
:
37
:
49
grubba Exp $");
#include "interpret.h" #include "svalue.h" #include "multiset.h"
59:
/*! @decl int(0..1) `!=(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Inequality operator.
+
*!
Inequality operator.
*!
-
*! Returns @tt{0@} (zero) if all the arguments are equal, and
-
*! @tt{1@} otherwise.
+
*!
@returns
+
*!
Returns @tt{0@} (zero) if all the arguments are equal, and
+
*!
@tt{1@} otherwise.
*!
-
*! This is the inverse of @[`==()].
+
*!
This is the inverse of @[`==()].
*! *! @seealso *! @[`==()]
78:
/*! @decl int(0..1) `==(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Equality operator.
+
*!
Equality operator.
*!
-
*! Returns @tt{1@} if all the arguments are equal, and
-
*! @tt{0@} (zero) otherwise.
+
*!
@returns
+
*!
Returns @tt{1@} if all the arguments are equal, and
+
*!
@tt{0@} (zero) otherwise.
*! *! @seealso *! @[`!=()]
90:
/*! @decl int(0..1) `<(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Less than operator.
+
*!
Less than operator.
*!
-
*! Returns @tt{1@} if the arguments are strictly increasing, and
-
*! @tt{0@} (zero) otherwise.
+
*!
@returns
+
*!
Returns @tt{1@} if the arguments are strictly increasing, and
+
*!
@tt{0@} (zero) otherwise.
*! *! @seealso *! @[`<=()], @[`>()], @[`>=()]
102:
/*! @decl int(0..1) `<=(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Less or equal operator.
+
*!
Less or equal operator.
*!
-
*! Returns @tt{1@} if the arguments are not strictly decreasing, and
-
*! @tt{0@} (zero) otherwise.
+
*!
@returns
+
*!
Returns @tt{1@} if the arguments are not strictly decreasing, and
+
*!
@tt{0@} (zero) otherwise.
*!
-
*! This is the inverse of @[`>()].
+
*!
This is the inverse of @[`>()].
*! *! @seealso *! @[`<()], @[`>()], @[`>=()]
116:
/*! @decl int(0..1) `>(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Greater than operator.
+
*!
Greater than operator.
*!
-
*! Returns @tt{1@} if the arguments are strictly decreasing, and
-
*! @tt{0@} (zero) otherwise.
+
*!
@returns
+
*!
Returns @tt{1@} if the arguments are strictly decreasing, and
+
*!
@tt{0@} (zero) otherwise.
*! *! @seealso *! @[`<()], @[`<=()], @[`>=()]
130:
*! *! Greater or equal operator. *!
-
*! Returns @tt{1@} if the arguments are not strictly increasing, and
-
*! @tt{0@} (zero) otherwise.
+
*!
@returns
+
*!
Returns @tt{1@} if the arguments are not strictly increasing, and
+
*!
@tt{0@} (zero) otherwise.
*!
-
*! This is the inverse of @[`<()].
+
*!
This is the inverse of @[`<()].
*! *! @seealso *! @[`<=()], @[`>()], @[`<()]
166:
*! @decl multiset `+(multiset arg1, multiset arg2) *! @decl mixed `+(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Addition operator.
+
*!
Addition operator.
*!
-
*! If there's only a single argument, that argument will be returned.
+
*!
@returns
+
*!
If there's only a single argument, that argument will be returned.
*!
-
*! If @[arg1] is an object and it has an @[lfun::`+()],
-
*! that function will be called with the rest of the arguments,
-
*! and the result returned.
+
*!
If @[arg1] is an object and it has an @[lfun::`+()],
+
*!
that function will be called with the rest of the arguments,
+
*!
and the result returned.
*!
-
*! Otherwise if any of the other arguments is an object that has
-
*! an @[lfun::``+()] the first such function fill be called
-
*! with the arguments leading up to it, and @[`+()] be called recursively
-
*! with the result and the rest of the srguments.
+
*!
Otherwise if any of the other arguments is an object that has
+
*!
an @[lfun::``+()] the first such function fill be called
+
*!
with the arguments leading up to it, and @[`+()] be called recursively
+
*!
with the result and the rest of the srguments.
*!
-
*! If there are two arguments the result will be:
-
*! @mixed @[arg1]
-
*! @type string
-
*! @[arg2] will be converted to a string, and the result the
-
*! strings concatenated.
-
*! @type int
-
*! @type float
-
*! @mixed @[arg2]
-
*! @type string
-
*! @[arg1] will be converted to string, and the result the
-
*! strings concatenated.
-
*! @type int
-
*! @type float
-
*! The result will be @code{@[arg1] + @[arg2]@}, and will
-
*! be a float if either @[arg1] or @[arg2] is a float.
-
*! @endmixed
-
*! @type array
-
*! The arrays will be concatenated.
-
*! @type mapping
-
*! The mappings will be joined.
-
*! @type multiset
-
*! The multisets will be added.
-
*! @endmixed
+
*!
If there are two arguments the result will be:
+
*!
@mixed @[arg1]
+
*!
@type string
+
*!
@[arg2] will be converted to a string, and the result the
+
*!
strings concatenated.
+
*!
@type int
+
*!
@type float
+
*!
@mixed @[arg2]
+
*!
@type string
+
*!
@[arg1] will be converted to string, and the result the
+
*!
strings concatenated.
+
*!
@type int
+
*!
@type float
+
*!
The result will be @code{@[arg1] + @[arg2]@}, and will
+
*!
be a float if either @[arg1] or @[arg2] is a float.
+
*!
@endmixed
+
*!
@type array
+
*!
The arrays will be concatenated.
+
*!
@type mapping
+
*!
The mappings will be joined.
+
*!
@type multiset
+
*!
The multisets will be added.
+
*!
@endmixed
*!
-
*! Otherwise if there are more than 2 arguments the result will be:
-
*! @code{`+(`+(@[arg1], @[arg2]), @@@[extras])@}
+
*!
Otherwise if there are more than 2 arguments the result will be:
+
*!
@code{`+(`+(@[arg1], @[arg2]), @@@[extras])@}
*! *! @note *! In Pike 7.0 and earlier the addition order was unspecified.
987:
*! @decl string `-(string arg1, string arg2) *! @decl mixed `-(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Negation/subtraction operator.
+
*!
Negation/subtraction operator.
*!
-
*! If there's only a single argument, that argument will be returned
-
*! negated. If @[arg1] was an object, @code{@[arg1]::`-()@} will be called
-
*! without arguments.
+
*!
@returns
+
*!
If there's only a single argument, that argument will be returned
+
*!
negated. If @[arg1] was an object, @code{@[arg1]::`-()@} will be called
+
*!
without arguments.
*!
-
*! If there are more than two arguments the result will be:
-
*! @code{`-(`-(@[arg1], @[arg2]), @@@[extras])@}.
+
*!
If there are more than two arguments the result will be:
+
*!
@code{`-(`-(@[arg1], @[arg2]), @@@[extras])@}.
*!
-
*! If @[arg1] is an object that overloads @tt{`-()@}, that function will
-
*! be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that overloads @tt{`-()@}, that function will
+
*!
be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that overloads @tt{``-()@}, that function will
-
*! be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that overloads @tt{``-()@}, that function will
+
*!
be called with @[arg1] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type mapping
-
*! @mixed @[arg2]
-
*! @type array
-
*! The result will be @[arg1] with all occurrances of
-
*! @[arg2] removed.
-
*! @type multiset
-
*! @type mapping
-
*! The result will be @[arg1] with all occurrences of
-
*! @code{@[indices](@[arg2])@} removed.
-
*! @endmixed
-
*! @type array
-
*! @type multiset
-
*! The result will be the elements of @[arg1] that are not in @[arg2].
-
*! @type float
-
*! @type int
-
*! The result will be @code{@[arg1] - @[arg2]@}, and will be a float
-
*! if either @[arg1] or @[arg2] is a float.
-
*! @type string
-
*! Result will be the string @[arg1] with all occurrances of the
-
*! substring @[arg2] removed.
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type mapping
+
*!
@mixed @[arg2]
+
*!
@type array
+
*!
The result will be @[arg1] with all occurrances of
+
*!
@[arg2] removed.
+
*!
@type multiset
+
*!
@type mapping
+
*!
The result will be @[arg1] with all occurrences of
+
*!
@code{@[indices](@[arg2])@} removed.
+
*!
@endmixed
+
*!
@type array
+
*!
@type multiset
+
*!
The result will be the elements of @[arg1] that are not in @[arg2].
+
*!
@type float
+
*!
@type int
+
*!
The result will be @code{@[arg1] - @[arg2]@}, and will be a float
+
*!
if either @[arg1] or @[arg2] is a float.
+
*!
@type string
+
*!
Result will be the string @[arg1] with all occurrances of the
+
*!
substring @[arg2] removed.
+
*!
@endmixed
*! *! @note *! In Pike 7.0 and earlier the subtraction order was unspecified.
1343:
*! @decl mapping `&(multiset arg1, mapping arg2) *! @decl mixed `&(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Bitwise and/intersection operator.
+
*!
Bitwise and/intersection operator.
*!
-
*! If there's a single argument, that argument will be returned.
+
*!
@returns
+
*!
If there's a single argument, that argument will be returned.
*!
-
*! If there are more than two arguments, the result will be:
-
*! @code{`&(`&(@[arg1], @[arg2]), @@@[extras])@}.
+
*!
If there are more than two arguments, the result will be:
+
*!
@code{`&(`&(@[arg1], @[arg2]), @@@[extras])@}.
*!
-
*! If @[arg1] is an object that has an @[lfun::`&()], that function
-
*! will be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that has an @[lfun::`&()], that function
+
*!
will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that has an @[lfun::``&()], that function
-
*! will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that has an @[lfun::``&()], that function
+
*!
will be called with @[arg1] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type int
-
*! The result will be the bitwise and of @[arg1] and @[arg2].
-
*! @type array
-
*! @type multiset
-
*! @type mapping
-
*! The result will be the elements of @[arg1] and @[arg2] that
-
*! occurr in both.
-
*! @type type
-
*! @type program
-
*! The result will be the type intersection of @[arg1] and @[arg2].
-
*! @type string
-
*! The result will be the string where the elements of @[arg1]
-
*! and @[arg2] have been pairwise bitwise anded.
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type int
+
*!
The result will be the bitwise and of @[arg1] and @[arg2].
+
*!
@type array
+
*!
@type multiset
+
*!
@type mapping
+
*!
The result will be the elements of @[arg1] and @[arg2] that
+
*!
occurr in both.
+
*!
@type type
+
*!
@type program
+
*!
The result will be the type intersection of @[arg1] and @[arg2].
+
*!
@type string
+
*!
The result will be the string where the elements of @[arg1]
+
*!
and @[arg2] have been pairwise bitwise anded.
+
*!
@endmixed
*! *! @seealso *! @[`|()], @[lfun::`&()], @[lfun::``&()]
1551:
*! @decl type `|(program|type arg1, program|type arg2) *! @decl mixed `|(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Bitwise or/join operator.
+
*!
Bitwise or/join operator.
*!
-
*! If there's a single argument, that argument will be returned.
+
*!
@returns
+
*!
If there's a single argument, that argument will be returned.
*!
-
*! If there are more than two arguments, the result will be:
-
*! @code{`|(`|(@[arg1], @[arg2]), @@@[extras])@}.
+
*!
If there are more than two arguments, the result will be:
+
*!
@code{`|(`|(@[arg1], @[arg2]), @@@[extras])@}.
*!
-
*! If @[arg1] is an object that has an @[lfun::`|()], that function
-
*! will be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that has an @[lfun::`|()], that function
+
*!
will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that has an @[lfun::``|()], that function
-
*! will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that has an @[lfun::``|()], that function
+
*!
will be called with @[arg1] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type int
-
*! The result will be the binary or of @[arg1] and @[arg2].
-
*! @type mapping
-
*! @type multiset
-
*! The result will be the join of @[arg1] and @[arg2].
-
*! @type array
-
*! The result will be the concatenation of @[arg1] and @[arg2].
-
*! @type string
-
*! The result will be the pairwise bitwose or of @[arg1] and @[arg2].
-
*! @type type
-
*! @type program
-
*! The result will be the type join of @[arg1] and @[arg2].
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type int
+
*!
The result will be the binary or of @[arg1] and @[arg2].
+
*!
@type mapping
+
*!
@type multiset
+
*!
The result will be the join of @[arg1] and @[arg2].
+
*!
@type array
+
*!
The result will be the concatenation of @[arg1] and @[arg2].
+
*!
@type string
+
*!
The result will be the pairwise bitwose or of @[arg1] and @[arg2].
+
*!
@type type
+
*!
@type program
+
*!
The result will be the type join of @[arg1] and @[arg2].
+
*!
@endmixed
*! *! @seealso *! @[`&()], @[lfun::`|()], @[lfun::``|()]
1761:
*! @decl type `^(program|type arg1, program|type arg2) *! @decl mixed `^(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Exclusive or operator.
+
*!
Exclusive or operator.
*!
-
*! If there's a single argument, that argument will be returned.
+
*!
@returns
+
*!
If there's a single argument, that argument will be returned.
*!
-
*! If there are more than two arguments, the result will be:
-
*! @code{`^(`^(@[arg1], @[arg2]), @@@[extras])@}.
+
*!
If there are more than two arguments, the result will be:
+
*!
@code{`^(`^(@[arg1], @[arg2]), @@@[extras])@}.
*!
-
*! If @[arg1] is an object that has an @[lfun::`^()], that function
-
*! will be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that has an @[lfun::`^()], that function
+
*!
will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that has an @[lfun::``^()], that function
-
*! will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that has an @[lfun::``^()], that function
+
*!
will be called with @[arg1] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type int
-
*! The result will be the bitwise xor of @[arg1] and @[arg2].
-
*! @type mapping
-
*! @type multiset
-
*! @type array
-
*! The result will be the elements of @[arg1] and @[arg2] that
-
*! only occurr in one of them.
-
*! @type string
-
*! The result will be the pairwise bitwise xor of @[arg1] and @[arg2].
-
*! @type type
-
*! @type program
-
*! The result will be the result of
-
*! @code{(@[arg1]&~@[arg2])|(~@[arg1]&@[arg2])@}.
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type int
+
*!
The result will be the bitwise xor of @[arg1] and @[arg2].
+
*!
@type mapping
+
*!
@type multiset
+
*!
@type array
+
*!
The result will be the elements of @[arg1] and @[arg2] that
+
*!
only occurr in one of them.
+
*!
@type string
+
*!
The result will be the pairwise bitwise xor of @[arg1] and @[arg2].
+
*!
@type type
+
*!
@type program
+
*!
The result will be the result of
+
*!
@code{(@[arg1]&~@[arg2])|(~@[arg1]&@[arg2])@}.
+
*!
@endmixed
*! *! @seealso *! @[`&()], @[`|()], @[lfun::`^()], @[lfun::``^()]
1861:
*! @decl mixed `<<(object arg1, int|object arg2) *! @decl mixed `<<(int arg1, object arg2) *!
-
*! Left shift operator.
+
*!
Left shift operator.
*!
-
*! If @[arg1] is an object that implements @[lfun::`<<()], that
-
*! function will be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that implements @[lfun::`<<()], that
+
*!
function will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that implements @[lfun::``<<()], that
-
*! function will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that implements @[lfun::``<<()], that
+
*!
function will be called with @[arg1] as the single argument.
*!
-
*! Otherwise @[arg1] will be shifted @[arg2] bits left.
+
*!
Otherwise @[arg1] will be shifted @[arg2] bits left.
*! *! @seealso *! @[`>>()]
1933:
*! @decl mixed `>>(object arg1, int|object arg2) *! @decl mixed `>>(int arg1, object arg2) *!
-
*! Right shift operator.
+
*!
Right shift operator.
*!
-
*! If @[arg1] is an object that implements @[lfun::`>>()], that
-
*! function will be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that implements @[lfun::`>>()], that
+
*!
function will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that implements @[lfun::``>>()], that
-
*! function will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that implements @[lfun::``>>()], that
+
*!
function will be called with @[arg1] as the single argument.
*!
-
*! Otherwise @[arg1] will be shifted @[arg2] bits left.
+
*!
Otherwise @[arg1] will be shifted @[arg2] bits left.
*! *! @seealso *! @[`<<()]
2166:
*! @decl int `*(int arg1, int arg2) *! @decl mixed `*(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Multiplication operator.
+
*!
Multiplication operator.
*!
-
*! If there's only a single argument, that argument will be returned.
+
*!
@returns
+
*!
If there's only a single argument, that argument will be returned.
*!
-
*! If the first argument is an object that implements @[lfun::`*()],
-
*! that function will be called with the rest of the arguments.
+
*!
If the first argument is an object that implements @[lfun::`*()],
+
*!
that function will be called with the rest of the arguments.
*!
-
*! If there are more than two arguments, the result will be
-
*! @code{`*(`*(@[arg1], @[arg2]), @@@[extras])@}.
+
*!
If there are more than two arguments, the result will be
+
*!
@code{`*(`*(@[arg1], @[arg2]), @@@[extras])@}.
*!
-
*! If @[arg2] is an object that implements @[lfun::``*()], that
-
*! function will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that implements @[lfun::``*()], that
+
*!
function will be called with @[arg1] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type array
-
*! @mixed @[arg2]
-
*! @type int
-
*! @type float
-
*! The result will be @[arg1] concatenated @[arg2] times.
-
*! @type string
-
*! @type array
-
*! The result will be the elements of @[arg1] concatenated with
-
*! @[arg2] interspersed.
-
*! @endmixed
-
*! @type string
-
*! The result will be @[arg1] concatenated @[arg2] times.
-
*! @type int
-
*! @type float
-
*! The result will be @code{@[arg1] * @[arg2]@}, and will be a
-
*! float if either @[arg1] or @[arg2] is a float.
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type array
+
*!
@mixed @[arg2]
+
*!
@type int
+
*!
@type float
+
*!
The result will be @[arg1] concatenated @[arg2] times.
+
*!
@type string
+
*!
@type array
+
*!
The result will be the elements of @[arg1] concatenated with
+
*!
@[arg2] interspersed.
+
*!
@endmixed
+
*!
@type string
+
*!
The result will be @[arg1] concatenated @[arg2] times.
+
*!
@type int
+
*!
@type float
+
*!
The result will be @code{@[arg1] * @[arg2]@}, and will be a
+
*!
float if either @[arg1] or @[arg2] is a float.
+
*!
@endmixed
*! *! @note *! In Pike 7.0 and earlier the multiplication order was unspecified.
2521:
*! @decl int `/(int arg1, int arg2) *! @decl mixed `/(mixed arg1, mixed arg2, mixed ... extras) *!
-
*! Division operator.
+
*!
Division operator.
*!
-
*! If there are more than two arguments, the result will be
-
*! @code{`/(`/(@[arg1], @[arg2]), @@@[extras])@}.
+
*!
@returns
+
*!
If there are more than two arguments, the result will be
+
*!
@code{`/(`/(@[arg1], @[arg2]), @@@[extras])@}.
*!
-
*! If @[arg1] is an object that implements @[lfun::`/()], that
-
*! function will be called with @[arg2] as the single argument.
+
*!
If @[arg1] is an object that implements @[lfun::`/()], that
+
*!
function will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that implements @[lfun::``/()], that
-
*! function will be called with @[arg1] as the single argument.
+
*!
If @[arg2] is an object that implements @[lfun::``/()], that
+
*!
function will be called with @[arg1] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type string
-
*! @mixed @[arg2]
-
*! @type int
-
*! @type float
-
*! The result will be and array of @[arg1] split in segments
-
*! of length @[arg2]. If @[arg2] is negative the splitting
-
*! will start from the end of @[arg1].
-
*! @type string
-
*! The result will be an array of @[arg1] split at each
-
*! occurrence of @[arg2]. Note that the segments that
-
*! matched against @[arg2] will not be in the result.
-
*! @endmixed
-
*! @type array
-
*! @mixed @[arg2]
-
*! @type int
-
*! @type float
-
*! The result will be and array of @[arg1] split in segments
-
*! of length @[arg2]. If @[arg2] is negative the splitting
-
*! will start from the end of @[arg1].
-
*! @type array
-
*! The result will be an array of @[arg1] split at each
-
*! occurrence of @[arg2]. Note that the elements that
-
*! matched against @[arg2] will not be in the result.
-
*! @endmixed
-
*! @type float
-
*! @type int
-
*! The result will be @code{@[arg1] / @[arg2]@}. If both arguments
-
*! are int, the result will be truncated to an int. Otherwise the
-
*! result will be a float.
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type string
+
*!
@mixed @[arg2]
+
*!
@type int
+
*!
@type float
+
*!
The result will be and array of @[arg1] split in segments
+
*!
of length @[arg2]. If @[arg2] is negative the splitting
+
*!
will start from the end of @[arg1].
+
*!
@type string
+
*!
The result will be an array of @[arg1] split at each
+
*!
occurrence of @[arg2]. Note that the segments that
+
*!
matched against @[arg2] will not be in the result.
+
*!
@endmixed
+
*!
@type array
+
*!
@mixed @[arg2]
+
*!
@type int
+
*!
@type float
+
*!
The result will be and array of @[arg1] split in segments
+
*!
of length @[arg2]. If @[arg2] is negative the splitting
+
*!
will start from the end of @[arg1].
+
*!
@type array
+
*!
The result will be an array of @[arg1] split at each
+
*!
occurrence of @[arg2]. Note that the elements that
+
*!
matched against @[arg2] will not be in the result.
+
*!
@endmixed
+
*!
@type float
+
*!
@type int
+
*!
The result will be @code{@[arg1] / @[arg2]@}. If both arguments
+
*!
are int, the result will be truncated to an int. Otherwise the
+
*!
result will be a float.
+
*!
@endmixed
*/ PMOD_EXPORT void f_divide(INT32 args) {
2711:
*! @decl float `%(int arg1, float arg2) *! @decl int `%(int arg1, int arg2) *!
-
*! Modulo operator.
+
*!
Modulo operator.
*!
-
*! If @[arg1] is an object that implements @[lfun::`%()] then
-
*! that function will be called with @[arg2] as the single argument.
+
*!
@returns
+
*!
If @[arg1] is an object that implements @[lfun::`%()] then
+
*!
that function will be called with @[arg2] as the single argument.
*!
-
*! If @[arg2] is an object that implements @[lfun::``%()] then
-
*! that function will be called with @[arg2] as the single argument.
+
*!
If @[arg2] is an object that implements @[lfun::``%()] then
+
*!
that function will be called with @[arg2] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg1]
-
*! @type string
-
*! @type array
-
*! If @[arg2] is positive, the result will be the last
-
*! @code{`%(@[sizeof](@[arg1]), @[arg2])@} elements of @[arg1].
-
*! If @[arg2] is negative, the result will be the first
-
*! @code{`%(@[sizeof](@[arg1]), -@[arg2])@} elements of @[arg1].
-
*! @type int
-
*! @type float
-
*! The result will be
-
*! @code{@[arg1] - @[arg2]*@[floor](@[arg1]/@[arg2])@}.
-
*! The result will be a float if either @[arg1] or @[arg2] is
-
*! a float, and an int otherwise.
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg1]
+
*!
@type string
+
*!
@type array
+
*!
If @[arg2] is positive, the result will be the last
+
*!
@code{`%(@[sizeof](@[arg1]), @[arg2])@} elements of @[arg1].
+
*!
If @[arg2] is negative, the result will be the first
+
*!
@code{`%(@[sizeof](@[arg1]), -@[arg2])@} elements of @[arg1].
+
*!
@type int
+
*!
@type float
+
*!
The result will be
+
*!
@code{@[arg1] - @[arg2]*@[floor](@[arg1]/@[arg2])@}.
+
*!
The result will be a float if either @[arg1] or @[arg2] is
+
*!
a float, and an int otherwise.
+
*!
@endmixed
*/ PMOD_EXPORT void f_mod(INT32 args) {
2786:
*! @decl int(1..1) `!(int(0..0) arg) *! @decl int(0..0) `!(mixed arg) *!
-
*! Negation operator.
+
*!
Negation operator.
*!
-
*! If @[arg] is an object that implements @[lfun::`!()], that function
-
*! will be called.
+
*!
@returns
+
*!
If @[arg] is an object that implements @[lfun::`!()], that function
+
*!
will be called.
*!
-
*! If @[arg] is @tt{0@} (zero), a destructed object, or a function in a
-
*! destructed object, @tt{1@} will be returned.
+
*!
If @[arg] is @tt{0@} (zero), a destructed object, or a function in a
+
*!
destructed object, @tt{1@} will be returned.
*!
-
*! Otherwise @tt{0@} (zero) will be returned.
+
*!
Otherwise @tt{0@} (zero) will be returned.
*! *! @seealso *! @[`==()], @[`!=()], @[lfun::`!()]
2902:
*! @decl type `~(type|program arg) *! @decl string `~(string arg) *!
-
*! Complement operator.
+
*!
Complement operator.
*!
-
*! The result will be as follows:
-
*! @mixed @[arg]
-
*! @type object
-
*! If @[arg] implements @[lfun::`~()], that function will be called.
-
*! @type int
-
*! The bitwise inverse of @[arg] will be returned.
-
*! @type float
-
*! The result will be @code{-1.0 - @[arg]@}.
-
*! @type type
-
*! @type program
-
*! The type inverse of @[arg] will be returned.
-
*! @type string
-
*! If @[arg1] only contains characters in the range 0 - 255 (8-bit),
-
*! a string containing the corresponding 8-bit inverses will be
-
*! returned.
-
*! @endmixed
+
*!
@returns
+
*!
The result will be as follows:
+
*!
@mixed @[arg]
+
*!
@type object
+
*!
If @[arg] implements @[lfun::`~()], that function will be called.
+
*!
@type int
+
*!
The bitwise inverse of @[arg] will be returned.
+
*!
@type float
+
*!
The result will be @code{-1.0 - @[arg]@}.
+
*!
@type type
+
*!
@type program
+
*!
The type inverse of @[arg] will be returned.
+
*!
@type string
+
*!
If @[arg1] only contains characters in the range 0 - 255 (8-bit),
+
*!
a string containing the corresponding 8-bit inverses will be
+
*!
returned.
+
*!
@endmixed
*! *! @seealso *! @[`!()], @[lfun::`~()]
3052:
*! @decl string `[](string arg, int start, int end) *! @decl array `[](array arg, int start, int end) *!
-
*! Index and range operator.
+
*!
Index and range operator.
*!
-
*! If @[arg] is an object that implements @[lfun::`[]()], that function
-
*! will be called with the rest of the arguments.
+
*!
@returns
+
*!
If @[arg] is an object that implements @[lfun::`[]()], that function
+
*!
will be called with the rest of the arguments.
*!
-
*! If there are 2 arguments the result will be as follows:
-
*! @mixed @[arg]
-
*! @type object
-
*! The non-static (ie public) symbol named @[index] will be looked up
-
*! in @[arg].
-
*! @type int
-
*! The bignum function named @[index] will be looked up in @[arg].
-
*! @type array
-
*! If @[index] is an int, index number @[index] of @[arg] will be
-
*! returned. Otherwise an array of all elements in @[arg] indexed
-
*! with @[index] will be returned.
-
*! @type mapping
-
*! If @[index] exists in @[arg] the corresponding value will be
returned.
-
*! Otherwise @tt{UNDEFINED@} will be returned.
-
*! @type multiset
-
*! If @[index] exists in @[arg], @tt{1@} will be returned.
-
*! Otherwise @tt{UNDEFINED@} will be returned.
-
*! @type string
-
*! The character (int) at index @[index] in @[arg] will be returned.
-
*! @type program
-
*! The non-static (ie public) constant symbol @[index] will be
-
*! looked up in @[arg].
-
*! @endmixed
+
*!
If there are 2 arguments the result will be as follows:
+
*!
@mixed @[arg]
+
*!
@type object
+
*!
The non-static (ie public) symbol named @[index] will be looked up
+
*!
in @[arg].
+
*!
@type int
+
*!
The bignum function named @[index] will be looked up in @[arg].
+
*!
@type array
+
*!
If @[index] is an int, index number @[index] of @[arg] will be
+
*!
returned. Otherwise an array of all elements in @[arg] indexed
+
*!
with @[index] will be returned.
+
*!
@type mapping
+
*!
If @[index] exists in @[arg] the corresponding value will be
+
*!
returned.
Otherwise @tt{UNDEFINED@} will be returned.
+
*!
@type multiset
+
*!
If @[index] exists in @[arg], @tt{1@} will be returned.
+
*!
Otherwise @tt{UNDEFINED@} will be returned.
+
*!
@type string
+
*!
The character (int) at index @[index] in @[arg] will be returned.
+
*!
@type program
+
*!
The non-static (ie public) constant symbol @[index] will be
+
*!
looked up in @[arg].
+
*!
@endmixed
*!
-
*! Otherwise if there are 3 arguments the result will be as follows:
-
*! @mixed @[arg]
-
*! @type string
-
*! A string with the characters between @[start] and @[end] (inclusive)
-
*! in @[arg] will be returned.
-
*! @type array
-
*! An array with the elements between @[start] and @[end] (inclusive)
-
*! in @[arg] will be returned.
-
*! @endmixed
+
*!
Otherwise if there are 3 arguments the result will be as follows:
+
*!
@mixed @[arg]
+
*!
@type string
+
*!
A string with the characters between @[start] and @[end] (inclusive)
+
*!
in @[arg] will be returned.
+
*!
@type array
+
*!
An array with the elements between @[start] and @[end] (inclusive)
+
*!
in @[arg] will be returned.
+
*!
@endmixed
*! *! @seealso *! @[`->()], @[lfun::`[]()]
3121:
*! @decl int(0..1) `->(multiset arg, string index) *! @decl mixed `->(program arg, string index) *!
-
*! Arrow index operator.
+
*!
Arrow index operator.
*!
-
*! This function behaves much like @[`[]()], just that the index is always
-
*! a string.
+
*!
This function behaves much like @[`[]()], just that the index is always
+
*!
a string.
*!
-
*! If @[arg] is an object that implements @[lfun::`->()], that function
-
*! will be called with @[index] as the single argument.
+
*!
@returns
+
*!
If @[arg] is an object that implements @[lfun::`->()], that function
+
*!
will be called with @[index] as the single argument.
*!
-
*! Otherwise the result will be as follows:
-
*! @mixed @[arg]
-
*! @type object
-
*! The non-static (ie public) symbol named @[index] will be looked up
-
*! in @[arg].
-
*! @type int
-
*! The bignum function named @[index] will be looked up in @[arg].
-
*! @type array
-
*! An array of all elements in @[arg] arrow indexed with @[index]
-
*! will be returned.
-
*! @type mapping
-
*! If @[index] exists in @[arg] the corresponding value will be
returned.
-
*! Otherwise @tt{UNDEFINED@} will be returned.
-
*! @type multiset
-
*! If @[index] exists in @[arg], @tt{1@} will be returned.
-
*! Otherwise @tt{UNDEFINED@} will be returned.
-
*! @type program
-
*! The non-static (ie public) constant symbol @[index] will be
-
*! looked up in @[arg].
-
*! @endmixed
+
*!
Otherwise the result will be as follows:
+
*!
@mixed @[arg]
+
*!
@type object
+
*!
The non-static (ie public) symbol named @[index] will be looked up
+
*!
in @[arg].
+
*!
@type int
+
*!
The bignum function named @[index] will be looked up in @[arg].
+
*!
@type array
+
*!
An array of all elements in @[arg] arrow indexed with @[index]
+
*!
will be returned.
+
*!
@type mapping
+
*!
If @[index] exists in @[arg] the corresponding value will be
+
*!
returned.
Otherwise @tt{UNDEFINED@} will be returned.
+
*!
@type multiset
+
*!
If @[index] exists in @[arg], @tt{1@} will be returned.
+
*!
Otherwise @tt{UNDEFINED@} will be returned.
+
*!
@type program
+
*!
The non-static (ie public) constant symbol @[index] will be
+
*!
looked up in @[arg].
+
*!
@endmixed
*! *! @seealso *! @[`[]()], @[lfun::`->()], @[::`->()]
3177:
*! @decl mixed `[]=(mapping arg, mixed index, mixed val) *! @decl int(0..1) `[]=(multiset arg, mixed index, int(0..1) val) *!
-
*! Index assign operator.
+
*!
Index assign operator.
*!
-
*! If @[arg] is an object that implements @[lfun::`[]=()], that function
-
*! will be called with @[index] and @[val] as the arguments.
+
*!
If @[arg] is an object that implements @[lfun::`[]=()], that function
+
*!
will be called with @[index] and @[val] as the arguments.
*!
-
*! @mixed @[arg]
-
*! @type object
-
*! The non-static (ie public) variable named @[index] will be looked up
-
*! in @[arg], and assigned @[val].
-
*! @type array
-
*! @type mapping
-
*! Index @[index] in @[arg] will be assigned @[val].
-
*! @type multiset
-
*! If @[val] is @tt{0@} (zero), one occurrance of @[index] in
-
*! @[arg] will be removed. Otherwise @[index] will be added
-
*! to @[arg] if it is not already there.
-
*! @endmixed
+
*!
@mixed @[arg]
+
*!
@type object
+
*!
The non-static (ie public) variable named @[index] will be looked up
+
*!
in @[arg], and assigned @[val].
+
*!
@type array
+
*!
@type mapping
+
*!
Index @[index] in @[arg] will be assigned @[val].
+
*!
@type multiset
+
*!
If @[val] is @tt{0@} (zero), one occurrance of @[index] in
+
*!
@[arg] will be removed. Otherwise @[index] will be added
+
*!
to @[arg] if it is not already there.
+
*!
@endmixed
*! *! @returns *! @[val] will be returned.
3224:
*! @decl mixed `->=(mapping arg, string index, mixed val) *! @decl int(0..1) `->=(multiset arg, string index, int(0..1) val) *!
-
*! Arrow assign operator.
+
*!
Arrow assign operator.
*!
-
*! This function behaves much like @[`[]=()], just that the index is always
-
*! a string.
+
*!
This function behaves much like @[`[]=()], just that the index is always
+
*!
a string.
*!
-
*! If @[arg] is an object that implements @[lfun::`->=()], that function
-
*! will be called with @[index] and @[val] as the arguments.
+
*!
If @[arg] is an object that implements @[lfun::`->=()], that function
+
*!
will be called with @[index] and @[val] as the arguments.
*!
-
*! @mixed @[arg]
-
*! @type object
-
*! The non-static (ie public) variable named @[index] will be looked up
-
*! in @[arg], and assigned @[val].
-
*! @type array
-
*! @type mapping
-
*! Index @[index] in @[arg] will be assigned @[val].
-
*! @type multiset
-
*! If @[val] is @tt{0@} (zero), one occurrance of @[index] in
-
*! @[arg] will be removed. Otherwise @[index] will be added
-
*! to @[arg] if it is not already there.
-
*! @endmixed
+
*!
@mixed @[arg]
+
*!
@type object
+
*!
The non-static (ie public) variable named @[index] will be looked up
+
*!
in @[arg], and assigned @[val].
+
*!
@type array
+
*!
@type mapping
+
*!
Index @[index] in @[arg] will be assigned @[val].
+
*!
@type multiset
+
*!
If @[val] is @tt{0@} (zero), one occurrance of @[index] in
+
*!
@[arg] will be removed. Otherwise @[index] will be added
+
*!
to @[arg] if it is not already there.
+
*!
@endmixed
*! *! @returns *! @[val] will be returned.
3276:
*! @decl int sizeof(multiset arg) *! @decl int sizeof(object arg) *!
-
*! Sizeof operator.
+
*!
Sizeof operator.
*!
-
*! The result will be as follows:
-
*! @mixed @[arg]
-
*! @type string
-
*! The number of characters in @[arg] will be returned.
-
*! @type array
-
*! @type multiset
-
*! The number of elements in @[arg] will be returned.
-
*! @type mapping
-
*! The number of key-value pairs in @[arg] will be returned.
-
*! @type object
-
*! If @[arg] implements @[lfun::_sizeof()], that function will
-
*! be called. Otherwise the number of non-static (ie public)
-
*! symbols in @[arg] will be returned.
-
*! @endmixed
+
*!
@returns
+
*!
The result will be as follows:
+
*!
@mixed @[arg]
+
*!
@type string
+
*!
The number of characters in @[arg] will be returned.
+
*!
@type array
+
*!
@type multiset
+
*!
The number of elements in @[arg] will be returned.
+
*!
@type mapping
+
*!
The number of key-value pairs in @[arg] will be returned.
+
*!
@type object
+
*!
If @[arg] implements @[lfun::_sizeof()], that function will
+
*!
be called. Otherwise the number of non-static (ie public)
+
*!
symbols in @[arg] will be returned.
+
*!
@endmixed
*! *! @seealso *! @[lfun::_sizeof()]