00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027 #ifndef SHPALETTEIMPL_HPP
00028 #define SHPALETTEIMPL_HPP
00029
00030 namespace SH {
00031
00032 template<typename T>
00033 ShPalette<T>::ShPalette(std::size_t size)
00034 : m_node(new ShPaletteNode(T::typesize, T::semantic_type, T::value_type, size)),
00035 m_data(new T[size])
00036 {
00037 for (std::size_t i = 0; i < size; i++) {
00038 m_node->set_node(i, m_data[i].node());
00039 }
00040 }
00041
00042 template<typename T>
00043 ShPalette<T>::~ShPalette()
00044 {
00045 delete [] m_data;
00046 }
00047
00048 template<typename T>
00049 const T& ShPalette<T>::operator[](std::size_t index) const
00050 {
00051 return m_data[index];
00052 }
00053
00054 template<typename T>
00055 T& ShPalette<T>::operator[](std::size_t index)
00056 {
00057 return m_data[index];
00058 }
00059
00060 template<typename T>
00061 template<typename T2>
00062 T ShPalette<T>::operator[](const ShGeneric<1, T2>& index) const
00063 {
00064 if (ShContext::current()->parsing()) {
00065 T t;
00066 ShVariable palVar(m_node);
00067 ShStatement stmt(t, palVar, SH_OP_PAL, index);
00068 ShContext::current()->parsing()->tokenizer.blockList()->addStatement(stmt);
00069 return t;
00070 } else {
00071 return m_data[(std::size_t)index.getValue(0)];
00072 }
00073 }
00074
00075 }
00076
00077 #endif