00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __LISTABLE_HH
00019 # define __LISTABLE_HH
00020
00021 # include "list_concept.hh"
00022
00023 namespace aurelia {
00024
00025 template <typename Model>
00026 struct listable_concept: public Model {
00027 public:
00028 typedef typename Model::type type;
00029 };
00030
00031 template <typename T>
00032 struct listable_model {
00033 typedef void no_model;
00034 };
00035
00036 }
00037
00038 template <typename H, typename T,
00039 typename = typename aurelia::listable_model<H>::model,
00040 typename = typename aurelia::list_model<T>::model>
00041 aurelia::list_cons<H,T> operator,(const T& t, const H& h) {
00042 return aurelia::list_cons<H,T>(h, t);
00043 }
00044
00045 template <typename H, typename T,
00046 typename = typename aurelia::listable_model<H>::model,
00047 typename = typename aurelia::listable_model<T>::model>
00048 aurelia::list_cons<H,aurelia::list_cons<T,aurelia::list_nil> >
00049 operator,(const T& t, const H& h) {
00050 return aurelia::list_cons<H,aurelia::list_cons<T,aurelia::list_nil> >
00051 (h, aurelia::list_cons<T,aurelia::list_nil>(t, aurelia::list_nil()));
00052 }
00053
00054 #endif