#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 |
ll 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 -> 5select ([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 |
LISTsize(["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().
1.5.9