29 template <
int tab_size>
36 operator table1dc&()
const {
return *(table1dc*)
this; }
45 table1dc *cliptable[10] = {
46 &static_cast<table1dc&>(clippingtable[0]),
47 &static_cast<table1dc&>(clippingtable[1]),
48 &static_cast<table1dc&>(clippingtable2[0]),
49 &static_cast<table1dc&>(clippingtable2[1]),
50 &static_cast<table1dc&>(clippingtable3[0]),
51 &static_cast<table1dc&>(clippingtable3[1]),
52 &static_cast<table1dc&>(clippingtable1[0]),
53 &static_cast<table1dc&>(clippingtable1[1]),
54 &static_cast<table1dc&>(clippingtable4[0]),
55 &static_cast<table1dc&>(clippingtable4[1]),
58 static inline double asymclip(
double x) {
61 const table1dc& clip = *cliptable[table];
63 f = (f/(3.0 + f) - clip.low) * clip.istep;
64 int i = static_cast<int>(f);
67 }
else if (i >= clip.size-1) {
68 f = clip.data[clip.size-1];
71 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
73 return copysign(f, -x);
76 static inline double asymclip2(
double x) {
79 const table1dc& clip = *cliptable[table];
81 f = (f/(3.0 + f) - clip.low) * clip.istep;
82 int i = static_cast<int>(f);
85 }
else if (i >= clip.size-1) {
86 f = clip.data[clip.size-1];
89 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
91 return copysign(f, -x);
94 static inline double asymclip3(
double x) {
97 const table1dc& clip = *cliptable[table];
99 f = (f/(3.0 + f) - clip.low) * clip.istep;
100 int i = static_cast<int>(f);
103 }
else if (i >= clip.size-1) {
104 f = clip.data[clip.size-1];
107 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
109 return copysign(f, -x);
112 static inline double asymclip4(
double x) {
115 const table1dc& clip = *cliptable[table];
117 f = (f/(3.0 + f) - clip.low) * clip.istep;
118 int i = static_cast<int>(f);
121 }
else if (i >= clip.size-1) {
122 f = clip.data[clip.size-1];
125 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
127 return copysign(f, -x);
130 static inline double opamp(
double x) {
132 const table1dc& clip = *cliptable[table];
134 f = (f/(3.0 + f) - clip.low) * clip.istep;
135 int i = static_cast<int>(f);
138 }
else if (i >= clip.size-1) {
139 f = clip.data[clip.size-1];
142 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
144 return copysign(f, -x);
147 static inline double opamp1(
double x) {
149 const table1dc& clip = *cliptable[table];
151 f = (f/(3.0 + f) - clip.low) * clip.istep;
152 int i = static_cast<int>(f);
155 }
else if (i >= clip.size-1) {
156 f = clip.data[clip.size-1];
159 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
161 return copysign(f, -x);
164 static inline double opamp2(
double x) {
166 const table1dc& clip = *cliptable[table];
168 f = (f/(3.0 + f) - clip.low) * clip.istep;
169 int i = static_cast<int>(f);
172 }
else if (i >= clip.size-1) {
173 f = clip.data[clip.size-1];
176 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
178 return copysign(f, -x);
181 static inline double asymhardclip(
double x) {
184 const table1dc& clip = *cliptable[table];
186 f = (f ) * clip.istep;
187 int i = static_cast<int>(f);
190 }
else if (i >= clip.size-1) {
191 f = clip.data[clip.size-1];
194 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
196 return copysign(f, -x);
200 static inline double asymhardclip2(
double x) {
203 const table1dc& clip = *cliptable[table];
205 f = (f - clip.low) * clip.istep;
206 int i = static_cast<int>(f);
209 }
else if (i >= clip.size-1) {
210 f = clip.data[clip.size-1];
213 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
215 return copysign(f, x);
218 static inline double symclip(
double x) {
220 const table1dc& clip = *cliptable[table];
222 f = (f/(3.0 + f) - clip.low) * clip.istep;
223 int i = static_cast<int>(f);
226 }
else if (i >= clip.size-1) {
227 f = clip.data[clip.size-1];
230 f = clip.data[i]*(1-f) + clip.data[i+1]*f;
232 return copysign(f, -x);