LINQ for C(GroupBy, GroupJoin, Join, Take, Where, Select, etc)
For more examples, please see the main.c file.
#include <gc.h>
#include "ArrayList.h"
#include "linq.h"
bool WhereCallback(void *item) {
char *str= (char *)item;
return str[0] == 'h';
}
void *SelectCallback(void *item) {
return newStr("%s_1", (char *)item);
}
ArrayList testLinq(ArrayList array) {
Linq *lq = From(array);
ArrayList result =
lq
->Where(lq, WhereCallback)
->Select(lq, SelectCallback)
->ToArray(lq);
return result;
}
int main() {
GC_INIT();
char *str1 = "huang", *str2 = "hai", *str3 = "feng";
ArrayList array = arrlist_new();
arrlist_append(array, str1);
arrlist_append(array, str2);
arrlist_append(array, str3);
ArrayList result = testLinq(array);
for(int i = 0; i < arrlist_size(result); i++) {
printf("%s\n", arrlist_get(result, i));
}
return 0;
}
ArrayList testLinq(ArrayList array) {
Linq *lq = From(array);
ArrayList result =
lq
->Where(lq,
lambda(bool, (void *item) {
char *str= (char *)item;
return str[0] == 'h';
}))
->Select(lq,
lambda(void *, (void *item) {
return newStr("%s_1", (char *)item);
}))
->ToArray(lq);
return result;
}
int main() {
GC_INIT();
char *str1 = "huang", *str2 = "hai", *str3 = "feng";
ArrayList array = arrlist_new();
arrlist_append(array, str1);
arrlist_append(array, str2);
arrlist_append(array, str3);
ArrayList result = testLinq(array);
for(int i = 0; i < arrlist_size(result); i++) {
printf("%s\n", arrlist_get(result, i));
}
return 0;
}
#define LINQ_PTR lq
bool WhereCallback(void *item) {
char *str= (char *)item;
return str[0] == 'h';
}
void *SelectCallback(void *item) {
return newStr("%s_1", (char *)item);
}
ArrayList testLinq(ArrayList array) {
Linq *lq = From(array);
ArrayList result =
lq
->WHERE(WhereCallback)
->SELECT(SelectCallback)
->TO_ARRAY();
return result;
}
int main(int argc, char **argv) {
GC_INIT();
char *str1 = "huang", *str2 = "hai", *str3 = "feng";
ArrayList array = arrlist_new();
arrlist_append(array, str1);
arrlist_append(array, str2);
arrlist_append(array, str3);
ArrayList result = testLinq(array);
for(int i = 0; i < arrlist_size(result); i++) {
printf("%s\n", arrlist_get(result, i));
}
return 0;
}
As for the garbage collect, you need to install Boehm GC
.
# yum install gc-devel # RedHat family
# apt-get install libgc-dev # Debian family
MIT