00001 //Copyright (c) 2004-2005, Baris Sumengen 00002 //All rights reserved. 00003 // 00004 // CIMPL Matrix Performance Library 00005 // 00006 //Redistribution and use in source and binary 00007 //forms, with or without modification, are 00008 //permitted provided that the following 00009 //conditions are met: 00010 // 00011 // * No commercial use is allowed. 00012 // This software can only be used 00013 // for non-commercial purposes. This 00014 // distribution is mainly intended for 00015 // academic research and teaching. 00016 // * Redistributions of source code must 00017 // retain the above copyright notice, this 00018 // list of conditions and the following 00019 // disclaimer. 00020 // * Redistributions of binary form must 00021 // mention the above copyright notice, this 00022 // list of conditions and the following 00023 // disclaimer in a clearly visible part 00024 // in associated product manual, 00025 // readme, and web site of the redistributed 00026 // software. 00027 // * Redistributions in binary form must 00028 // reproduce the above copyright notice, 00029 // this list of conditions and the 00030 // following disclaimer in the 00031 // documentation and/or other materials 00032 // provided with the distribution. 00033 // * The name of Baris Sumengen may not be 00034 // used to endorse or promote products 00035 // derived from this software without 00036 // specific prior written permission. 00037 // 00038 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT 00039 //HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 00040 //EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 00041 //NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00042 //MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00043 //PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00044 //CONTRIBUTORS BE LIABLE FOR ANY 00045 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00046 //EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00047 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00048 //OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00049 //DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00050 //HOWEVER CAUSED AND ON ANY THEORY OF 00051 //LIABILITY, WHETHER IN CONTRACT, STRICT 00052 //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00053 //OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00054 //OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00055 //POSSIBILITY OF SUCH DAMAGE. 00056 00057 00058 00059 #pragma once 00060 #ifndef LIST_H 00061 #define LIST_H 00062 00063 #include <cstdarg> 00064 00065 #include <iostream> 00066 00067 using std::cout; 00068 using std::cerr; 00069 using std::endl; 00070 using std::ostream; 00071 00072 00075 template< class T, int l > 00076 class List 00077 { 00078 protected: 00079 T data[l]; 00080 int length; 00081 00082 public: 00083 00084 List(void) 00085 { 00086 length = l; 00087 } 00088 00089 List(T e, ...) 00090 { 00091 length = l; 00092 data[0] = e; 00093 00094 va_list argptr; 00095 va_start(argptr, e); 00096 for(int i=1; i<length; i++) 00097 { 00098 data[i] = va_arg(argptr, T); 00099 } 00100 va_end(argptr); 00101 } 00102 00103 00104 ~List(void) 00105 { 00106 } 00107 00108 00109 const T* DataPtr() 00110 { 00111 return data; 00112 } 00113 00114 T* Data() 00115 { 00116 return data; 00117 } 00118 00119 int Length() 00120 { 00121 return length; 00122 } 00123 00124 T& operator[] (const int i) 00125 { 00126 return data[i]; 00127 } 00128 00129 friend ostream& operator<< (ostream& output, List<T,l>& m) 00130 { 00131 output << "("; 00132 for(int i=0; i<l-1; i++) 00133 { 00134 output << m.data[i] << ","; 00135 } 00136 output << m.data[l-1] << ")"; 00137 return output; 00138 } 00139 00140 }; 00141 00142 00143 00144 #endif 00145 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160 00161 00162 00163 00164 00165 00166 00167 00168 00169