00001
00002
00003 #include "cppscript"
00004 #include "dynamic/extensions.hpp"
00005 #include "wrap_cpp_container.hpp"
00006
00007 #include <list>
00008
00009 static_call( register_pickle_type( cmp_list, list() ) );
00010
00011 using internal::nonroot_var;
00012
00013
00014 namespace
00015 {
00016 struct list_traits
00017 {
00018 typedef nonroot_var value_type;
00019
00020 typedef std::list<value_type, dynamic::allocator<value_type> > container;
00021
00022 static var key(const nonroot_var & i)
00023 {
00024 return i.get();
00025 }
00026
00027 static var value(const nonroot_var & i)
00028 {
00029 return i.get();
00030 }
00031
00032 static var deref(const nonroot_var & i)
00033 {
00034 return i.get();
00035 }
00036
00037 static void mark_reachable(const nonroot_var & i, gc::garbage_collector & gc)
00038 {
00039 i.ref().impl().mark_reachable(gc);
00040 }
00041
00042 static const var_cmp_index comparison_index = cmp_list;
00043
00044 static const var & to_value(const var & v)
00045 {
00046 return v;
00047 }
00048
00049 static var back(const container & c)
00050 {
00051 return c.back().get();
00052 }
00053
00054 static var front(const container & c)
00055 {
00056 return c.front().get();
00057 }
00058
00059 static void pop_back(container & c)
00060 {
00061 c.pop_back();
00062 }
00063
00064 static void pickle(pickler & p, const nonroot_var & i)
00065 {
00066 p.write_object(i.ref());
00067 }
00068
00069 static var unpickle(unpickler & p)
00070 {
00071 return p.read_object();
00072 }
00073
00074 static const char * class_name()
00075 {
00076 return "list";
00077 }
00078
00079 static const char * iterator_class_name()
00080 {
00081 return "list::iterator";
00082 }
00083 };
00084 }
00085
00086 namespace dynamic
00087 {
00088 namespace types
00089 {
00091
00092 typedef dynamic::internal::wrap_list_container<list_traits> list_impl;
00093 }
00094 }
00095
00096
00097 var dynamic::list()
00098 {
00099 return new types::list_impl();
00100 }
00101
00102
00103 var dynamic::list(const var & i0)
00104 {
00105 return list()(i0);
00106 }
00107
00108
00109 var dynamic::list(const var & i0, const var & i1)
00110 {
00111 return list(i0)(i1);
00112 }
00113
00114
00115 var dynamic::list(const var & i0, const var & i1, const var & i2)
00116 {
00117 return list(i0)(i1)(i2);
00118 }
00119
00120
00121 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3)
00122 {
00123 return list(i0)(i1)(i2)(i3);
00124 }
00125
00126
00127 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3, const var & i4)
00128 {
00129 return list(i0)(i1)(i2)(i3)(i4);
00130 }
00131
00132
00133 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3, const var & i4, const var & i5)
00134 {
00135 return list(i0)(i1)(i2)(i3)(i4)(i5);
00136 }
00137
00138
00139 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3, const var & i4, const var & i5, const var & i6)
00140 {
00141 return list(i0)(i1)(i2)(i3)(i4)(i5)(i6);
00142 }
00143
00144
00145 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3, const var & i4, const var & i5, const var & i6, const var & i7)
00146 {
00147 return list(i0)(i1)(i2)(i3)(i4)(i5)(i6)(i7);
00148 }
00149
00150
00151 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3, const var & i4, const var & i5, const var & i6, const var & i7, const var & i8)
00152 {
00153 return list(i0)(i1)(i2)(i3)(i4)(i5)(i6)(i7)(i8);
00154 }
00155
00156
00157 var dynamic::list(const var & i0, const var & i1, const var & i2, const var & i3, const var & i4, const var & i5, const var & i6, const var & i7, const var & i8, const var & i9)
00158 {
00159 return list(i0)(i1)(i2)(i3)(i4)(i5)(i6)(i7)(i8)(i9);
00160 }
00161
00162
00163 var dynamic::list_from(const var & container)
00164 {
00165 var l = list();
00166 foreach(i, container) l.push_back(i);
00167 return l;
00168 }