summaryrefslogtreecommitdiffstats
path: root/cpp/sca/runtime/core/src/tuscany/list.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/sca/runtime/core/src/tuscany/list.hpp')
-rw-r--r--cpp/sca/runtime/core/src/tuscany/list.hpp379
1 files changed, 0 insertions, 379 deletions
diff --git a/cpp/sca/runtime/core/src/tuscany/list.hpp b/cpp/sca/runtime/core/src/tuscany/list.hpp
deleted file mode 100644
index ef493b19ca..0000000000
--- a/cpp/sca/runtime/core/src/tuscany/list.hpp
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* $Rev$ $Date$ */
-
-#ifndef tuscany_list_hpp
-#define tuscany_list_hpp
-
-/**
- * Simple list functions.
- */
-
-#include <iostream>
-#include "function.hpp"
-
-namespace tuscany {
-
-long countlists = 0;
-long countIlists = 0;
-long countClists = 0;
-long countElists = 0;
-
-bool resetlistCounters() {
- countlists = countIlists = countClists = countElists = 0;
- return true;
-}
-
-bool printlistCounters() {
- std::cout << "countlists " << countlists << std::endl;
- std::cout << "countElists " << countElists << std::endl;
- std::cout << "countIlists " << countIlists << std::endl;
- std::cout << "countClists " << countClists << std::endl;
- return true;
-}
-
-/**
- * A car/cdr lisp-like pair, base structure to construct lists.
- */
-
-template<typename T> class list {
-public:
-
- list(const T car, const lambda<list<T> ()>& cdr) :
- nil(false), car(car), cdr(cdr) {
- countlists++;
- countIlists++;
- }
-
- list() :
- nil(true) {
- countlists++;
- countElists++;
- }
-
- list(const list& p) :
- nil(p.nil), car(p.car), cdr(p.cdr) {
- countlists++;
- countClists++;
- }
-
- const list& operator=(const list<T>& p) {
- if(this == &p)
- return *this;
- nil = p.nil;
- car = p.car;
- cdr = p.cdr;
- return *this;
- }
-
- ~list() {
- countlists--;
- }
-
- const bool operator==(const list<T>& p) const {
- if(this == &p)
- return true;
- if(nil)
- return p.nil;
- if(p.nil)
- return false;
- if(!(car == p.car))
- return false;
- if(cdr == p.cdr)
- return true;
- return cdr() == p.cdr();
- }
-
- const bool operator!=(const list<T>& p) const {
- return !this->operator==(p);
- }
-
- template<typename X> friend std::ostream& operator<<(std::ostream&, const list<X>&);
-
- bool nil;
- T car;
- lambda<list<T> ()> cdr;
-};
-
-/**
- * Returns true if the given list is nil.
- */
-template<typename T> const bool isNil(const list<T>& p) {
- return p.nil;
-}
-
-/**
- * Write a list to an output stream.
- */
-template<typename X> std::ostream& operator<<(std::ostream& out, const list<X>& l) {
- if(l == list<X> ())
- return out << "()";
- return out << "(" << car(l) << ", " << cdr(l) << ")";
-}
-
-/**
- * Construct a (lazy) list from a value and a lambda function that returns the cdr.
- */
-template<typename T> const list<T> cons(const T& car, const lambda<list<T> ()>& cdr) {
- return list<T> (car, cdr);
-}
-
-/**
- * Construct a list from a value and a cdr list.
- */
-template<typename T> const list<T> cons(const T& car, const list<T>& cdr) {
- return list<T> (car, unit(cdr));
-}
-
-/**
- * Construct a list of one value.
- */
-template<typename T> const list<T> makeList(const T& car) {
- return list<T> (car, unit(list<T> ()));
-}
-
-/**
- * Construct a list of two values.
- */
-template<typename T> const list<T> makeList(const T& a, const T& b) {
- return cons(a, makeList(b));
-}
-
-/**
- * Construct a list of three values.
- */
-template<typename T> const list<T> makeList(const T& a, const T& b, const T& c) {
- return cons(a, cons(b, makeList(c)));
-}
-
-/**
- * Construct a list of four values.
- */
-template<typename T> const list<T> makeList(const T& a, const T& b, const T& c, const T& d) {
- return cons(a, cons(b, cons(c, makeList(d))));
-}
-
-/**
- * Returns the car of a list.
- */
-template<typename T> const T car(const list<T>& p) {
- return p.car;
-}
-
-/**
- * Returns the cdr of a list.
- */
-template<typename T> list<T> const cdr(const list<T>& p) {
- return p.cdr();
-}
-
-/**
- * Returns the car of the cdr of a list.
- */
-template<typename T> const T cadr(const list<T>& p) {
- return car(cdr(p));
-}
-
-/**
- * Returns the car of the cdr of the cdr of a list.
- */
-template<typename T> const T caddr(const list<T>& p) {
- return car(cdr(cdr(p)));
-}
-
-/**
- * Returns the cdr of a cdr of a list.
- */
-template<typename T> const list<T> cddr(const list<T>& p) {
- return cdr(cdr(p));
-}
-
-/**
- * Returns the cdr of a cdr of the cdr of a list.
- */
-template<typename T> const list<T> cdddr(const list<T>& p) {
- return cdr(cdr(cdr(p)));
-}
-
-/**
- * Returns the length of a list.
- */
-template<typename T> struct lengthRef {
- const int operator()(const int c, const list<T>& p) {
- if(isNil(p))
- return c;
- return (*this)(c + 1, cdr(p));
- }
-};
-
-template<typename T> const int length(const list<T>& p) {
- return lengthRef<T> ()(0, p);
-}
-
-/**
- * Appends a list and a lambda function returning a list.
- */
-template<typename T> struct appendCdr {
- const list<T> a;
- const lambda<list<T> ()> fb;
- appendCdr(const list<T>& a, const lambda<list<T> ()>& fb) :
- a(a), fb(fb) {
- }
- const list<T> operator()() const {
- return append(a, fb);
- }
-};
-
-template<typename T> const list<T> append(const list<T>&a, const lambda<list<T> ()>& fb) {
- if(isNil(a))
- return fb();
-
- return cons(car(a), lambda<list<T> ()> (appendCdr<T> (cdr(a), fb)));
-}
-
-/**
- * Appends two lists.
- */
-template<typename T> const list<T> append(const list<T>&a, const list<T>& b) {
- return append(a, unit(b));
-}
-
-/**
- * Map a lambda function on a list.
- */
-template<typename T, typename R> const list<R> map(const lambda<R(T)>& f, const list<T>& p) {
- if(isNil(p))
- return list<R> ();
- return cons(f(car(p)), map(f, cdr(p)));
-}
-
-/**
- * Run a reduce lambda function on a list.
- */
-template<typename T, typename R> struct reduceAccumulate {
- const lambda<R(R, T)> f;
- explicit reduceAccumulate(const lambda<R(R, T)>& f) :
- f(f) {
- }
- R operator()(const R& acc, const list<T>& p) const {
- if(isNil(p))
- return acc;
- return (*this)(f(acc, car(p)), cdr(p));
- }
-};
-
-template<typename T, typename R> const R reduce(const lambda<R(R, T)>& f, const R& initial, const list<T>& p) {
- return reduceAccumulate<T, R> (f)(initial, p);
-}
-
-/**
- * Run a filter lambda function on a list.
- */
-template<typename T> const list<T> filter(const lambda<bool(T)>& f, const list<T>& p) {
- if(isNil(p))
- return list<T> ();
- if(f(car(p))) {
- const lambda<list<T> (lambda<bool(T)> , list<T> )> ff(filter<T> );
- return cons(car(p), curry(ff, f, cdr(p)));
- }
- return filter(f, cdr(p));
-}
-
-/**
- * Returns a list pointing to a member of a list.
- */
-template<typename T> const list<T> member(const T& t, const list<T>& p) {
- if(isNil(p))
- return list<T> ();
- if(t == car(p))
- return p;
- return member(t, cdr(p));
-}
-
-/**
- * Reverse a list.
- */
-template<typename T> const list<T> reverseIter(const list<T>& acc, const list<T>& p) {
- if(isNil(p))
- return acc;
- return reverseIter(cons(car(p), acc), cdr(p));
-}
-
-template<typename T> const list<T> reverse(const list<T>& p) {
- return reverseIter(list<T> (), p);
-}
-
-template<typename T> const list<T> seq(const T& start, const T& end);
-
-template<typename T> struct seqGenerate {
- const T start;
- const T end;
- seqGenerate(const T& start, const T&end) :
- start(start), end(end) {
- }
- const list<T> operator()() const {
- return seq<T> (start, end);
- }
-};
-
-/**
- * Returns a sequence of values between the given bounds.
- */
-template<typename T> const list<T> seq(const T& start, const T& end) {
- if(start == end)
- return makeList(start);
- if(start < end)
- return cons(start, lambda<list<T> ()> (seqGenerate<T> (start + 1, end)));
- return cons(start, lambda<list<T> ()> (seqGenerate<T> (start - 1, end)));
-}
-
-/**
- * Equivalent of the list assoc function.
- */
-template<typename T> const list<T> assoc(const T& k, const list<list<T> >& p) {
- if(isNil(p))
- return list<T> ();
- if(k == car(car(p)))
- return car(p);
- return assoc(k, cdr(p));
-}
-
-/**
- * Pretty print a list.
- */
-template<typename T> std::ostream& print(const list<T>& l, std::ostream& os) {
- os << "(";
- if (!isNil(l)) {
- list<T> ml = l;
- while(true) {
- os << car(ml);
- ml = cdr(ml);
- if (isNil(ml))
- break;
- os << ", ";
- }
- }
- os << ")";
- return os;
-}
-
-}
-
-#endif /* tuscany_list_hpp */