#include <set>
#include <algorithm>
#include "ycp/YCPBuiltinList.h"
#include "ycp/YCPList.h"
#include "ycp/YCPMap.h"
#include "ycp/YCPSymbol.h"
#include "ycp/YCPString.h"
#include "ycp/YCPBoolean.h"
#include "ycp/YCPInteger.h"
#include "ycp/YCPVoid.h"
#include "ycp/YCPCode.h"
#include "ycp/YCPCodeCompare.h"
#include "ycp/YCPTerm.h"
#include "ycp/StaticDeclaration.h"
#include "ycp/y2log.h"
Defines | |
#define | ETC 0, NULL, constTypePtr(), NULL |
#define | ETCf NULL, constTypePtr(), NULL |
Functions | |
static YCPValue | l_find (const YCPSymbol &symbol, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_prepend (const YCPList &list, const YCPValue &value) |
static YCPValue | l_contains (const YCPList &list, const YCPValue &value) |
static YCPValue | l_setcontains (const YCPList &list, const YCPValue &value) |
static YCPValue | l_unionlist (const YCPList &list1, const YCPList &list2) |
static YCPValue | l_mergelist (const YCPList &list1, const YCPList &list2) |
static YCPValue | l_sublist1 (const YCPList &list, const YCPInteger &offset) |
static YCPValue | l_sublist2 (const YCPList &list, const YCPInteger &offset, const YCPInteger &length) |
static YCPValue | l_filter (const YCPSymbol &symbol, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_maplist (const YCPSymbol &symbol, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_listmap (const YCPSymbol &symbol, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_flatten (const YCPList &list) |
static YCPValue | l_toset (const YCPList &list) |
static YCPValue | l_sortlist (const YCPList &list) |
static YCPValue | l_sort (const YCPValue &sym1, const YCPValue &sym2, const YCPList &list, const YCPCode &order) |
static YCPValue | l_lsortlist (const YCPList &list) |
static YCPValue | l_splitstring (const YCPString &s, const YCPString &c) |
static YCPValue | l_changelist (YCPList &list, const YCPValue &value) |
static YCPValue | l_add (const YCPList &list, const YCPValue &value) |
static YCPValue | l_isempty (const YCPList &l) |
static YCPValue | l_size (const YCPValue &list) |
static YCPValue | l_remove (const YCPList &list, const YCPInteger &i) |
static YCPValue | l_select (const YCPValue &list, const YCPValue &i, const YCPValue &def) |
static YCPValue | l_foreach (const YCPValue &sym, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_reduce_helper (const YCPSymbol &x, const YCPSymbol &y, const YCPValue &initial, const YCPList::const_iterator &first, const YCPList::const_iterator &last, const YCPCode &expr) |
static YCPValue | l_reduce1 (const YCPSymbol &x, const YCPSymbol &y, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_reduce2 (const YCPSymbol &x, const YCPSymbol &y, const YCPValue &initial, const YCPList &list, const YCPCode &expr) |
static YCPValue | l_swaplist (const YCPList &v, YCPInteger &i1, YCPInteger &i2) |
static YCPValue | l_tolist (const YCPValue &v) |
Variables | |
StaticDeclaration | static_declarations |
#define ETC 0, NULL, constTypePtr(), NULL |
#define ETCf NULL, constTypePtr(), NULL |
add add-list Create a new list with a new element
list | LIST | |
any | VAR |
LIST
but has the value VAR
appended as additional element.References YCPList::functionalAdd(), and YCPElement::isNull().
Referenced by YCPBuiltinList::YCPBuiltinList().
change change-list Changes a list. Deprecated, use LIST[size(LIST)] = value.
list | LIST | |
any | value |
References YCPList::add(), YCPElement::isNull(), and ycpinternal.
Referenced by YCPBuiltinList::YCPBuiltinList().
contains Checks if a list contains an element
list | LIST List | |
any | ELEMENT Element |
ELEMENT
is contained in a list LIST
.contains ([1, 2, 5], 2) -> true
References YCPList::contains().
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_filter | ( | const YCPSymbol & | symbol, | |
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
filter filter-list Filters a List
any | VAR Variable | |
list | LIST List to be filtered | |
block<boolean> | EXPR Block |
LIST
the expression expr
is executed in a new block, where the variable VAR
is assigned to that value. If the expression evaluates to true under this circumstances, the value is appended to the result list.References YCPList::add(), YCPList::begin(), YCPList::end(), YCPElement::isNull(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_find | ( | const YCPSymbol & | symbol, | |
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
find find-list Searches for the first occurence of a certain element in a list
any | VAR | |
list | LIST | |
block | EXPR |
EXPR
to each element in the list and returns the first element the makes the expression evaluate to true, if VAR
is bound to that element.
References YCPList::begin(), YCPList::end(), YCPElement::isNull(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
flatten Flattens List
list<list> | LIST |
LIST
and creates a single list that is the concatenation of those lists in LIST
.flatten ([ [1, 2], [3, 4] ]) -> [1, 2, 3, 4] flatten ([ [1, 2], [6, 7], [3, 4] ]) -> [1, 2, 6, 7, 3, 4]
References YCPList::add(), YCPElement::isNull(), YCPList::size(), YCPList::value(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_foreach | ( | const YCPValue & | sym, | |
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
foreach foreach-list Processes the content of a list
any | VAR | |
list | LIST | |
block | EXPR |
LIST
the expression EXPR
is executed in a new context, where the variable VAR
is assigned to that value. The return value of the last execution of EXPR
is the value of the foreach
construct.
References YCPList::begin(), YCPList::end(), YCPElement::isNull(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
isempty isempty-list Returns whether the list l
is empty.
list | l List |
l
l
must not be nil.isempty([]) -> true isempty([19, 29]) -> false
References YCPList::isEmpty().
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_listmap | ( | const YCPSymbol & | symbol, | |
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
listmap Maps an operation onto all elements of a list and thus creates a map.
any | VAR | |
list | LIST | |
block | EXPR |
VAR
of the list LIST
in the expression EXPR
is evaluated in a new block. The result is the map of those evaluations.The result of each evaluation must be a map with a single entry which will be added to the result map.
listmap (integer k, [1,2,3], { return $[k:"xy"]; }) -> $[1:"xy", 2:"xy"] listmap (integer k, [1,2,3], { integer a = k+10; any b = sformat ("x%1", k); return $[a:b]; }) -> $[11:"x1", 12:"x2", 13:"x3"]
References YCPMap::add(), YCPMap::begin(), YCPList::begin(), YCPList::end(), YCPElement::isNull(), YCPMap::size(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
lsort Sort A List respecting locale
list | LIST |
References YCPElement::isNull(), and YCPList::lsortlist().
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_maplist | ( | const YCPSymbol & | symbol, | |
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
maplist maplist-list Maps an operation onto all elements of a list and thus creates a new list.
any | VAR | |
list<any> | LIST | |
block | EXPR |
LIST
the expression EXPR
is evaluated in a new block, where the variable VAR
is assigned to that value. The result is the list of those evaluations.maplist (integer v, [1, 2, 3, 5], { return (v + 1); }) -> [2, 3, 4, 6]
References YCPList::add(), YCPList::begin(), YCPList::end(), YCPElement::isNull(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
merge Merges two lists into one
list | LIST1 First List | |
list | LIST2 Second List |
l1
are prior to elements from l2
. nil
as either argument makes the result nil
too.
References YCPList::add(), YCPElement::isNull(), YCPList::size(), and YCPList::value().
Referenced by YCPBuiltinList::YCPBuiltinList().
prepend Prepends a list with a new element
list | LIST List | |
any | ELEMENT Element to prepend |
LIST
but has the value ELEMENT
prepended as additional element.References YCPList::functionalAdd(), and YCPElement::isNull().
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_reduce1 | ( | const YCPSymbol & | x, | |
const YCPSymbol & | y, | |||
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
list::reduce list.reduce-internal Reduces a list to a single value.
flex1 | x | |
flex1 | y | |
list<flex1> | list | |
block<flex1> | expression |
In this version the initial value is the first value of the list. Thus the list must not be empty.
list::reduce (integer x, integer y, [2, 4, 6], { return x < y ? x : y; }) -> 2 list::reduce (integer x, integer y, [2, 4, 6], { return x > y ? x : y; }) -> 6
References YCPList::begin(), YCPList::end(), YCPList::isEmpty(), l_reduce_helper(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_reduce2 | ( | const YCPSymbol & | x, | |
const YCPSymbol & | y, | |||
const YCPValue & | initial, | |||
const YCPList & | list, | |||
const YCPCode & | expr | |||
) | [static] |
list::reduce list.reduce-external Reduces a list to a single value.
flex1 | x | |
flex2 | y | |
flex1 | value | |
list<flex2> | list | |
block<flex1> | expression |
In this version the initial value is explicitly provided. Thus the list can be empty. Also the return type can be different from the type of the list.
list::reduce (integer x, integer y, 0, [2, 4, 6], { return x + y; }) -> 12 list::reduce (integer x, integer y, 1, [2, 4, 6], { return x * y; }) -> 48
list::reduce (term t, float f, `item(`id(`dummy)), [3.14, 2.71], { return add(t, tostring(f)); }) -> `item (`id (`dummy), "3.14", "2.71")
References YCPList::begin(), YCPList::end(), and l_reduce_helper().
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_reduce_helper | ( | const YCPSymbol & | x, | |
const YCPSymbol & | y, | |||
const YCPValue & | initial, | |||
const YCPList::const_iterator & | first, | |||
const YCPList::const_iterator & | last, | |||
const YCPCode & | expr | |||
) | [static] |
static YCPValue l_remove | ( | const YCPList & | list, | |
const YCPInteger & | i | |||
) | [static] |
remove remove-list Removes element from a list
list | LIST | |
integer | e element index |
i
'th value from a list. The first value has the index 0. The call remove ([1,2,3], 1) thus returns [1,3].remove ([1, 2], 0) -> [2]
References YCPElement::isNull(), YCPList::remove(), YCPList::size(), toString(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_select | ( | const YCPValue & | list, | |
const YCPValue & | i, | |||
const YCPValue & | def | |||
) | [static] |
select select-list Selects a list element (deprecated, use LIST[INDEX]:DEFAULT)
list | LIST | |
integer | INDEX | |
any | DEFAULT |
INDEX
'th value of a list. The first value has the index 0. The call select([1,2,3], 1) thus returns 2. Returns DEFAULT
if the index is invalid or if the found entry has a different type than the default value. Functionality replaced by syntax: list numbers = [1, 2, 3, 4]; numbers[2]:nil -> 3 numbers[8]:5 -> 5
select ([1, 2], 22, 0) -> 0 select ([1, "two"], 0, "no") -> "no"
References YCPElement::isNull(), t_select(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
setcontains Checks if a sorted list contains an element
list | LIST List | |
any | ELEMENT Element |
ELEMENT
is contained in a list LIST
, but assumes that LIST
is sorted. If LIST
is not sorted, the result is undefined.References YCPList::begin(), and YCPList::end().
Referenced by YCPBuiltinList::YCPBuiltinList().
size size-list Returns size of list
list | LIST |
LIST
size(["A", 1, true, "3", false]) -> 5
References YCPElement::isNull().
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_sort | ( | const YCPValue & | sym1, | |
const YCPValue & | sym2, | |||
const YCPList & | list, | |||
const YCPCode & | order | |||
) | [static] |
sort sort-expr Sort list using an expression
any | x | |
any | y | |
list | LIST | |
block | EXPR |
LIST
. You have to specify an order on the list elements by naming formal variables x
and y
and specify an expression EXPR
that evaluates to a boolean value depending on x
and y
. Return true if x
>y
to sort the list ascending.The comparison must be an irreflexive one, that is ">" instead of ">=".
It is because we no longer use bubblesort (yuck) but std::sort which requires a <ulink url="href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html">strict weak ordering</ulink>.
sort (integer x, integer y, [ 3,6,2,8 ], ``(x < y)) -> [ 2, 3, 6, 8 ] sort (string x, string y, [ "A","C","B" ], ``(x > y)) -> ["C", "B", "A"]
References YCPList::fsortlist(), and YCPElement::isNull().
Referenced by YCPBuiltinList::YCPBuiltinList().
sort sort-lt Sorts a List according to the YCP builtin predicate
list | LIST |
sort ([2, 1, true, 1]) -> [true, 1, 1, 2]
References YCPElement::isNull(), and YCPList::sortlist().
Referenced by YCPBuiltinList::YCPBuiltinList().
splitstring Split a string by delimiter
string | STR | |
string | DELIM |
STR
into sub-strings at delimiter chars DELIM
. the resulting pieces do not contain DELIM
If STR
starts with DELIM
, the first string in the result list is empty If STR
ends with DELIM
, the last string in the result list is empty. If STR
does not contain DELIM
, the result is a singleton list with STR
.
References YCPList::add(), YCPElement::isNull(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_sublist1 | ( | const YCPList & | list, | |
const YCPInteger & | offset | |||
) | [static] |
sublist sublist-rest Extracts a sublist
Extracts a sublist of the list LIST
starting at OFFSET
. The OFFSET
starts with 0.
list | LIST | |
integer | OFFSET |
References YCPList::add(), YCPElement::isNull(), YCPList::size(), toString(), YCPList::value(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_sublist2 | ( | const YCPList & | list, | |
const YCPInteger & | offset, | |||
const YCPInteger & | length | |||
) | [static] |
sublist sublist-length Extracts a sublist
Extracts a sublist of the list LIST
starting at OFFSET
with length LENGTH
. The OFFSET
starts with 0.
list | LIST | |
integer | OFFSET | |
integer | LENGTH |
References YCPList::add(), YCPElement::isNull(), YCPList::size(), toString(), YCPList::value(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
static YCPValue l_swaplist | ( | const YCPList & | v, | |
YCPInteger & | i1, | |||
YCPInteger & | i2 | |||
) | [static] |
list::swap list.swap Creates new list with swaped elemetns at offset i1 and i2.
list<flex1> | v list | |
integer | i1 index of first element | |
integer | i2 index of second element |
list::swap ([0,1,2,3],0,2) -> [2,1,0,3] list::swap ([0,1,2,3],1,3) -> [0,3,2,1] list::swap ([0,1,2,3],0,4) -> [0,1,2,3]
References YCPElement::isNull(), YCPList::size(), YCPList::swap(), and ycp2error.
Referenced by YCPBuiltinList::YCPBuiltinList().
tolist Converts a value to a list (deprecated, use (list)VAR).
any | VAR |
any l_1 = [1, 2, 3]; list <integer> l_2 = (list<integer>) l_1;
References YCPElement::isNull(), and YT_LIST.
Referenced by YCPBuiltinList::YCPBuiltinList().
toset Sorts list and removes duplicates
list | LIST |
References YCPList::begin(), and YCPList::end().
Referenced by YCPBuiltinList::YCPBuiltinList().
union union-list Unions of lists
list | LIST1 First List | |
list | LIST2 Second List |
l1
are prior to elements from l2
. nil
as either argument makes the result nil
too.WARNING: quadratic complexity so far
References YCPList::add(), YCPList::contains(), YCPElement::isNull(), YCPList::size(), and YCPList::value().
Referenced by YCPBuiltinList::YCPBuiltinList().