/[svn]/linuxsampler/trunk/src/drivers/DeviceParameter.cpp
ViewVC logotype

Contents of /linuxsampler/trunk/src/drivers/DeviceParameter.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 128 - (show annotations) (download)
Tue Jun 15 03:19:30 2004 UTC (19 years, 10 months ago) by senkov
File size: 28544 byte(s)
* Remove calls to pure virtual from constructor of base class
 to avoid runtime failure. InitWithDefault() will have to be called
 from the constructor of the class where virtuals are implemented.

1 /***************************************************************************
2 * *
3 * LinuxSampler - modular, streaming capable sampler *
4 * *
5 * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck *
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the Free Software *
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
20 * MA 02111-1307 USA *
21 ***************************************************************************/
22
23 #include <strings.h>
24 #include <stdlib.h>
25
26 #include "DeviceParameter.h"
27
28 namespace LinuxSampler {
29
30 static bool __parse_bool(String val) throw (LinuxSamplerException) {
31 int b;
32 if (val == "1" || !strcasecmp(val.c_str(),"true")) b = true;
33 else if (val == "0" || !strcasecmp(val.c_str(),"false")) b = false;
34 else throw LinuxSamplerException("Invalid value for boolean Device parameter");
35 return b;
36 }
37
38 static int __parse_int(String val) throw (LinuxSamplerException) {
39 return atoi(val.c_str()); // TODO: format check is missing
40 }
41
42 static float __parse_float(String val) throw (LinuxSamplerException) {
43 return atof(val.c_str()); // TODO: format check is missing
44 }
45
46 static std::vector<String> __parse_strings(String val) throw (LinuxSamplerException) {
47 std::vector<String> vS;
48
49 // if there's only a single value, then we also allow to give it without being encapsulted into apostrophes
50 if (val.find("\'") == String::npos && val.find("\"") == String::npos) {
51 vS.push_back(val);
52 }
53 else { // if multiple strings or a string encapsulated into apostrophes
54 char* pStart = (char*) val.c_str();
55 char* pC = pStart;
56 if (*pC != '\'' && *pC != '\"') throw LinuxSamplerException("Invalid form, all individual strings should be encapsulated into apostrophes, separated by commas");
57
58 while (true) {
59 // search for token end
60 char* pTokenStart = pC + 1;
61 do {
62 pC++;
63 if (*pC == '\0') throw LinuxSamplerException("Invalid form, all individual strings should be encapsulated into apostrophes, separated by commas");
64 }
65 while (*pC != '\'' && *pC != '\"');
66 vS.push_back(val.substr((int)(pTokenStart - pStart), (int)(pC - pTokenStart))); // we found the token's end
67
68 // now there should be either a comma or the end of the total string
69 if (*(++pC) == '\0') break;
70 if (*pC != ',') throw LinuxSamplerException("Invalid form, all individual strings should be encapsulated into apostrophes, separated by commas");
71 }
72 }
73
74 return vS;
75 }
76
77
78
79 // *************** DeviceRuntimeParameterBool ***************
80 // *
81
82 DeviceRuntimeParameterBool::DeviceRuntimeParameterBool(bool bVal) {
83 this->bVal = bVal;
84 }
85
86 String DeviceRuntimeParameterBool::Type() {
87 return "BOOL";
88 }
89
90 bool DeviceRuntimeParameterBool::Multiplicity() {
91 return false;
92 }
93
94 optional<String> DeviceRuntimeParameterBool::RangeMin() {
95 return optional<String>::nothing;
96 }
97
98 optional<String> DeviceRuntimeParameterBool::RangeMax() {
99 return optional<String>::nothing;
100 }
101
102 optional<String> DeviceRuntimeParameterBool::Possibilities() {
103 return optional<String>::nothing;
104 }
105
106 String DeviceRuntimeParameterBool::Value() {
107 return (ValueAsBool()) ? "TRUE" : "FALSE";
108 }
109
110 void DeviceRuntimeParameterBool::SetValue(String val) throw (LinuxSamplerException) {
111 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
112 int b = __parse_bool(val);
113 OnSetValue(b);
114 SetValue(b);
115 }
116
117 bool DeviceRuntimeParameterBool::ValueAsBool() {
118 return bVal;
119 }
120
121 void DeviceRuntimeParameterBool::SetValue(bool b) {
122 bVal = b;
123 }
124
125
126
127 // *************** DeviceRuntimeParameterInt ***************
128 // *
129
130 DeviceRuntimeParameterInt::DeviceRuntimeParameterInt(int iVal) {
131 this->iVal = iVal;
132 }
133
134 String DeviceRuntimeParameterInt::Type() {
135 return "INT";
136 }
137
138 bool DeviceRuntimeParameterInt::Multiplicity() {
139 return false;
140 }
141
142 optional<String> DeviceRuntimeParameterInt::RangeMin() {
143 optional<int> rangemin = RangeMinAsInt();
144 if (!rangemin) return optional<String>::nothing;
145 return ToString(*rangemin);
146 }
147
148 optional<String> DeviceRuntimeParameterInt::RangeMax() {
149 optional<int> rangemax = RangeMaxAsInt();
150 if (!rangemax) return optional<String>::nothing;
151 return ToString(*rangemax);
152 }
153
154 optional<String> DeviceRuntimeParameterInt::Possibilities() {
155 std::vector<int> possibilities = PossibilitiesAsInt();
156 if (possibilities.empty()) return optional<String>::nothing;
157
158 std::stringstream ss;
159 std::vector<int>::iterator iter = possibilities.begin();
160 while (iter != possibilities.end()) {
161 if (ss.str() != "") ss << ",";
162 ss << *iter;
163 iter++;
164 }
165 return ss.str();
166 }
167
168 String DeviceRuntimeParameterInt::Value() {
169 return ToString(ValueAsInt());
170 }
171
172 void DeviceRuntimeParameterInt::SetValue(String val) throw (LinuxSamplerException) {
173 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
174 int i = __parse_int(val);
175 if (RangeMinAsInt() && i < *RangeMinAsInt()) throw LinuxSamplerException("Invalid device parameter value: too small");
176 if (RangeMaxAsInt() && i > *RangeMaxAsInt()) throw LinuxSamplerException("Invalid device parameter value: too big");
177
178 std::vector<int> possibilities = PossibilitiesAsInt();
179 if (possibilities.size()) {
180 bool valid = false;
181 std::vector<int>::iterator iter = possibilities.begin();
182 while (iter != possibilities.end()) {
183 if (i == *iter) {
184 valid = true;
185 break;
186 }
187 iter++;
188 }
189 if (!valid) throw LinuxSamplerException("Invalid device parameter value: not in set of possible values");
190 }
191 OnSetValue(i);
192 SetValue(i);
193 }
194
195 int DeviceRuntimeParameterInt::ValueAsInt() {
196 return iVal;
197 }
198
199 void DeviceRuntimeParameterInt::SetValue(int i) {
200 iVal = i;
201 }
202
203
204
205 // *************** DeviceRuntimeParameterFloat ***************
206 // *
207
208 DeviceRuntimeParameterFloat::DeviceRuntimeParameterFloat(float fVal) {
209 this->fVal = fVal;
210 }
211
212 String DeviceRuntimeParameterFloat::Type() {
213 return "FLOAT";
214 }
215
216 bool DeviceRuntimeParameterFloat::Multiplicity() {
217 return false;
218 }
219
220 optional<String> DeviceRuntimeParameterFloat::RangeMin() {
221 optional<float> rangemin = RangeMinAsFloat();
222 if (!rangemin) return optional<String>::nothing;
223 return ToString(*rangemin);
224 }
225
226 optional<String> DeviceRuntimeParameterFloat::RangeMax() {
227 optional<float> rangemax = RangeMaxAsFloat();
228 if (!rangemax) return optional<String>::nothing;
229 return ToString(*rangemax);
230 }
231
232 optional<String> DeviceRuntimeParameterFloat::Possibilities() {
233 std::vector<float> possibilities = PossibilitiesAsFloat();
234 if (possibilities.empty()) return optional<String>::nothing;
235
236 std::stringstream ss;
237 std::vector<float>::iterator iter = possibilities.begin();
238 while (iter != possibilities.end()) {
239 if (ss.str() != "") ss << ",";
240 ss << *iter;
241 iter++;
242 }
243 return ss.str();
244 }
245
246 String DeviceRuntimeParameterFloat::Value() {
247 return ToString(ValueAsFloat());
248 }
249
250 void DeviceRuntimeParameterFloat::SetValue(String val) throw (LinuxSamplerException) {
251 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
252 float f = __parse_float(val);
253 if (RangeMinAsFloat() && f < *RangeMinAsFloat()) throw LinuxSamplerException("Invalid device parameter value: too small");
254 if (RangeMaxAsFloat() && f > *RangeMaxAsFloat()) throw LinuxSamplerException("Invalid device parameter value: too big");
255
256 std::vector<float> possibilities = PossibilitiesAsFloat();
257 if (possibilities.size()) {
258 bool valid = false;
259 std::vector<float>::iterator iter = possibilities.begin();
260 while (iter != possibilities.end()) {
261 if (f == *iter) {
262 valid = true;
263 break;
264 }
265 iter++;
266 }
267 if (!valid) throw LinuxSamplerException("Invalid device parameter value: not in set of possible values");
268 }
269 OnSetValue(f);
270 SetValue(f);
271 }
272
273 float DeviceRuntimeParameterFloat::ValueAsFloat() {
274 return fVal;
275 }
276
277 void DeviceRuntimeParameterFloat::SetValue(float f) {
278 fVal = f;
279 }
280
281
282
283 // *************** DeviceRuntimeParameterString ***************
284 // *
285
286 DeviceRuntimeParameterString::DeviceRuntimeParameterString(String sVal) {
287 this->sVal = sVal;
288 }
289
290 String DeviceRuntimeParameterString::Type() {
291 return "STRING";
292 }
293
294 bool DeviceRuntimeParameterString::Multiplicity() {
295 return false;
296 }
297
298 optional<String> DeviceRuntimeParameterString::RangeMin() {
299 return optional<String>::nothing;
300 }
301
302 optional<String> DeviceRuntimeParameterString::RangeMax() {
303 return optional<String>::nothing;
304 }
305
306 optional<String> DeviceRuntimeParameterString::Possibilities() {
307 std::vector<String> possibilities = PossibilitiesAsString();
308 if (possibilities.empty()) return optional<String>::nothing;
309
310 std::stringstream ss;
311 std::vector<String>::iterator iter = possibilities.begin();
312 while (iter != possibilities.end()) {
313 if (ss.str() != "") ss << ",";
314 ss << "'" << *iter << "'";
315 iter++;
316 }
317 return ss.str();
318 }
319
320 String DeviceRuntimeParameterString::Value() {
321 return sVal;
322 }
323
324 void DeviceRuntimeParameterString::SetValue(String val) throw (LinuxSamplerException) {
325 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
326 if (val.find("\'") != String::npos) throw LinuxSamplerException("Character -> \' <- not allowed");
327 if (val.find("\"") != String::npos) throw LinuxSamplerException("Character -> \" <- not allowed");
328 OnSetValue(val);
329 sVal = val;
330 }
331
332
333
334 // *************** DeviceRuntimeParameterStrings ***************
335 // *
336
337 DeviceRuntimeParameterStrings::DeviceRuntimeParameterStrings(std::vector<String> vS) {
338 this->sVals = vS;
339 }
340
341 String DeviceRuntimeParameterStrings::Type() {
342 return "STRING";
343 }
344
345 bool DeviceRuntimeParameterStrings::Multiplicity() {
346 return true;
347 }
348
349 optional<String> DeviceRuntimeParameterStrings::RangeMin() {
350 return optional<String>::nothing;
351 }
352
353 optional<String> DeviceRuntimeParameterStrings::RangeMax() {
354 return optional<String>::nothing;
355 }
356
357 optional<String> DeviceRuntimeParameterStrings::Possibilities() {
358 std::vector<String> possibilities = PossibilitiesAsString();
359 if (possibilities.empty()) return optional<String>::nothing;
360
361 std::stringstream ss;
362 std::vector<String>::iterator iter = possibilities.begin();
363 while (iter != possibilities.end()) {
364 if (ss.str() != "") ss << ",";
365 ss << "'" << *iter << "'";
366 iter++;
367 }
368 return ss.str();
369 }
370
371 String DeviceRuntimeParameterStrings::Value() {
372 String result;
373 std::vector<String>::iterator iter = this->sVals.begin();
374 while (iter != this->sVals.end()) {
375 if (result != "") result += ",";
376 result += "'" + *iter + "'";
377 iter++;
378 }
379 return result;
380 }
381
382 void DeviceRuntimeParameterStrings::SetValue(String val) throw (LinuxSamplerException) {
383 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
384 std::vector<String> vS = __parse_strings(val);
385 OnSetValue(vS);
386 SetValue(vS);
387 }
388
389 std::vector<String> DeviceRuntimeParameterStrings::ValueAsStrings() {
390 return sVals;
391 }
392
393 void DeviceRuntimeParameterStrings::SetValue(std::vector<String> vS) {
394 sVals = vS;
395 }
396
397
398
399
400
401
402 // *************** DeviceCreationParameter ***************
403 // *
404
405 optional<String> DeviceCreationParameter::Depends() {
406 std::map<String,DeviceCreationParameter*> dependencies = DependsAsParameters();
407 if (!dependencies.size()) return optional<String>::nothing;
408
409 std::map<String,DeviceCreationParameter*>::iterator iter = dependencies.begin();
410 String s;
411 for (; iter != dependencies.end(); iter++) {
412 if (s != "") s += ",";
413 s += iter->first;
414 }
415 return s;
416 }
417
418 optional<String> DeviceCreationParameter::Default() {
419 std::map<String,String> Parameters; // empty parameters vector
420 return Default(Parameters);
421 }
422
423 optional<String> DeviceCreationParameter::RangeMin() {
424 std::map<String,String> Parameters; // empty parameters vector
425 return RangeMin(Parameters);
426 }
427
428 optional<String> DeviceCreationParameter::RangeMax() {
429 std::map<String,String> Parameters; // empty parameters vector
430 return RangeMax(Parameters);
431 }
432
433 optional<String> DeviceCreationParameter::Possibilities() {
434 std::map<String,String> Parameters; // empty parameters vector
435 return Possibilities(Parameters);
436 }
437
438
439
440 // *************** DeviceCreationParameterBool ***************
441 // *
442
443 DeviceCreationParameterBool::DeviceCreationParameterBool() {
444 }
445
446 DeviceCreationParameterBool::DeviceCreationParameterBool(bool bVal) {
447 this->bVal = bVal;
448 }
449
450 DeviceCreationParameterBool::DeviceCreationParameterBool(String val) throw (LinuxSamplerException) {
451 this->bVal = __parse_bool(val);
452 }
453
454 void DeviceCreationParameterBool::InitWithDefault() {
455 std::map<String,String> Parameters; // empty parameters vector
456 optional<bool> defaultval = DefaultAsBool(Parameters);
457 this->bVal = (defaultval) ? *defaultval : false;
458 }
459
460 String DeviceCreationParameterBool::Type() {
461 return "BOOL";
462 }
463
464 bool DeviceCreationParameterBool::Multiplicity() {
465 return false;
466 }
467
468 optional<String> DeviceCreationParameterBool::Default(std::map<String,String> Parameters) {
469 optional<bool> defaultval = DefaultAsBool(Parameters);
470 if (!defaultval) return optional<String>::nothing;
471 return (*defaultval) ? "TRUE" : "FALSE";
472 }
473
474 optional<String> DeviceCreationParameterBool::RangeMin(std::map<String,String> Parameters) {
475 return optional<String>::nothing;
476 }
477
478 optional<String> DeviceCreationParameterBool::RangeMax(std::map<String,String> Parameters) {
479 return optional<String>::nothing;
480 }
481
482 optional<String> DeviceCreationParameterBool::Possibilities(std::map<String,String> Parameters) {
483 return optional<String>::nothing;
484 }
485
486 String DeviceCreationParameterBool::Value() {
487 return (ValueAsBool()) ? "TRUE" : "FALSE";
488 }
489
490 void DeviceCreationParameterBool::SetValue(String val) throw (LinuxSamplerException) {
491 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
492 int b = __parse_bool(val);
493 OnSetValue(b);
494 SetValue(b);
495 }
496
497 bool DeviceCreationParameterBool::ValueAsBool() {
498 return bVal;
499 }
500
501 void DeviceCreationParameterBool::SetValue(bool b) {
502 bVal = b;
503 }
504
505
506
507 // *************** DeviceCreationParameterInt ***************
508 // *
509
510 DeviceCreationParameterInt::DeviceCreationParameterInt() {
511 }
512
513 DeviceCreationParameterInt::DeviceCreationParameterInt(int iVal) {
514 this->iVal = iVal;
515 }
516
517 DeviceCreationParameterInt::DeviceCreationParameterInt(String val) throw (LinuxSamplerException) {
518 this->iVal = __parse_int(val);
519 }
520
521 void DeviceCreationParameterInt::InitWithDefault() {
522 std::map<String,String> Parameters; // empty parameters vector
523 optional<int> i = DefaultAsInt(Parameters);
524 this->iVal = (i) ? *i : 0;
525 }
526
527 String DeviceCreationParameterInt::Type() {
528 return "INT";
529 }
530
531 bool DeviceCreationParameterInt::Multiplicity() {
532 return false;
533 }
534
535 optional<String> DeviceCreationParameterInt::Default(std::map<String,String> Parameters) {
536 optional<int> defaultval = DefaultAsInt(Parameters);
537 if (!defaultval) return optional<String>::nothing;
538 return ToString(*defaultval);
539 }
540
541 optional<String> DeviceCreationParameterInt::RangeMin(std::map<String,String> Parameters) {
542 optional<int> rangemin = RangeMinAsInt(Parameters);
543 if (!rangemin) return optional<String>::nothing;
544 return ToString(rangemin);
545 }
546
547 optional<String> DeviceCreationParameterInt::RangeMax(std::map<String,String> Parameters) {
548 optional<int> rangemax = RangeMaxAsInt(Parameters);
549 if (!rangemax) return optional<String>::nothing;
550 return ToString(rangemax);
551 }
552
553 optional<String> DeviceCreationParameterInt::Possibilities(std::map<String,String> Parameters) {
554 std::vector<int> possibilities = PossibilitiesAsInt(Parameters);
555 if (possibilities.empty()) return optional<String>::nothing;
556
557 std::vector<int>::iterator iter = possibilities.begin();
558 std::stringstream ss;
559 while (iter != possibilities.end()) {
560 if (ss.str() != "") ss << ",";
561 ss << *iter;
562 iter++;
563 }
564 return ss.str();
565 }
566
567 String DeviceCreationParameterInt::Value() {
568 return ToString(ValueAsInt());
569 }
570
571 void DeviceCreationParameterInt::SetValue(String val) throw (LinuxSamplerException) {
572 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
573 int i = __parse_int(val);
574 //if (RangeMinAsInt() && i < *RangeMinAsInt()) throw LinuxSamplerException("Invalid device parameter value: too small");
575 //if (RangeMaxAsInt() && i > *RangeMaxAsInt()) throw LinuxSamplerException("Invalid device parameter value: too big");
576 /*if (PossibilitiesAsInt()) {
577 bool valid = false;
578 std::vector<int>* pPossibilities = PossibilitiesAsInt();
579 std::vector<int>::iterator iter = pPossibilities->begin();
580 while (iter != pPossibilities->end()) {
581 if (i == *iter) {
582 valid = true;
583 break;
584 }
585 iter++;
586 }
587 if (!valid) throw LinuxSamplerException("Invalid Device parameter value: not in set of possible values");
588 }*/
589 OnSetValue(i);
590 SetValue(i);
591 }
592
593 int DeviceCreationParameterInt::ValueAsInt() {
594 return iVal;
595 }
596
597 void DeviceCreationParameterInt::SetValue(int i) {
598 iVal = i;
599 }
600
601
602
603 // *************** DeviceCreationParameterFloat ***************
604 // *
605
606 DeviceCreationParameterFloat::DeviceCreationParameterFloat() {
607 }
608
609 DeviceCreationParameterFloat::DeviceCreationParameterFloat(float fVal) {
610 this->fVal = fVal;
611 }
612
613 DeviceCreationParameterFloat::DeviceCreationParameterFloat(String val) throw (LinuxSamplerException) {
614 this->fVal = __parse_float(val);
615 }
616
617 void DeviceCreationParameterFloat::InitWithDefault() {
618 std::map<String,String> Parameters; // empty parameters vector
619 optional<float> f = DefaultAsFloat(Parameters);
620 this->fVal = (f) ? *f : 0.0f;
621 }
622
623 String DeviceCreationParameterFloat::Type() {
624 return "FLOAT";
625 }
626
627 bool DeviceCreationParameterFloat::Multiplicity() {
628 return false;
629 }
630
631 optional<String> DeviceCreationParameterFloat::Default(std::map<String,String> Parameters) {
632 optional<float> defaultval = DefaultAsFloat(Parameters);
633 if (!defaultval) return optional<String>::nothing;
634 return ToString(*defaultval);
635 }
636
637 optional<String> DeviceCreationParameterFloat::RangeMin(std::map<String,String> Parameters) {
638 optional<float> rangemin = RangeMinAsFloat(Parameters);
639 if (!rangemin) return optional<String>::nothing;
640 return ToString(*rangemin);
641 }
642
643 optional<String> DeviceCreationParameterFloat::RangeMax(std::map<String,String> Parameters) {
644 optional<float> rangemax = RangeMaxAsFloat(Parameters);
645 if (!rangemax) return optional<String>::nothing;
646 return ToString(*rangemax);
647 }
648
649 optional<String> DeviceCreationParameterFloat::Possibilities(std::map<String,String> Parameters) {
650 std::vector<float> possibilities = PossibilitiesAsFloat(Parameters);
651 if (possibilities.empty()) return optional<String>::nothing;
652
653 std::vector<float>::iterator iter = possibilities.begin();
654 std::stringstream ss;
655 while (iter != possibilities.end()) {
656 if (ss.str() != "") ss << ",";
657 ss << *iter;
658 iter++;
659 }
660 return ss.str();
661 }
662
663 String DeviceCreationParameterFloat::Value() {
664 return ToString(ValueAsFloat());
665 }
666
667 void DeviceCreationParameterFloat::SetValue(String val) throw (LinuxSamplerException) {
668 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
669 float f = __parse_float(val);
670 //if (RangeMinAsFloat() && i < *RangeMinAsFloat()) throw LinuxSamplerException("Invalid device parameter value: too small");
671 //if (RangeMaxAsFloat() && i > *RangeMaxAsFloat()) throw LinuxSamplerException("Invalid device parameter value: too big");
672 /*if (PossibilitiesAsFloat()) {
673 bool valid = false;
674 std::vector<float>* pPossibilities = PossibilitiesAsFloat();
675 std::vector<float>::iterator iter = pPossibilities->begin();
676 while (iter != pPossibilities->end()) {
677 if (f == *iter) {
678 valid = true;
679 break;
680 }
681 iter++;
682 }
683 if (!valid) throw LinuxSamplerException("Invalid Device parameter value: not in set of possible values");
684 }*/
685 OnSetValue(f);
686 SetValue(f);
687 }
688
689 float DeviceCreationParameterFloat::ValueAsFloat() {
690 return fVal;
691 }
692
693 void DeviceCreationParameterFloat::SetValue(float f) {
694 fVal = f;
695 }
696
697
698
699 // *************** DeviceCreationParameterString ***************
700 // *
701
702 DeviceCreationParameterString::DeviceCreationParameterString() {
703 }
704
705 DeviceCreationParameterString::DeviceCreationParameterString(String sVal) {
706 this->sVal = sVal;
707 }
708
709 void DeviceCreationParameterString::InitWithDefault() {
710 std::map<String,String> Parameters; // empty parameters vector
711 optional<String> defaulval = Default(Parameters);
712 if (defaulval) this->sVal = *defaulval;
713 else this->sVal = "";
714 }
715
716 String DeviceCreationParameterString::Type() {
717 return "STRING";
718 }
719
720 bool DeviceCreationParameterString::Multiplicity() {
721 return false;
722 }
723
724 optional<String> DeviceCreationParameterString::RangeMin(std::map<String,String> Parameters) {
725 return optional<String>::nothing;
726 }
727
728 optional<String> DeviceCreationParameterString::RangeMax(std::map<String,String> Parameters) {
729 return optional<String>::nothing;
730 }
731
732 optional<String> DeviceCreationParameterString::Possibilities(std::map<String,String> Parameters) {
733 std::vector<String> possibilities = PossibilitiesAsString(Parameters);
734 if (possibilities.empty()) return optional<String>::nothing;
735
736 std::stringstream ss;
737 std::vector<String>::iterator iter = possibilities.begin();
738 while (iter != possibilities.end()) {
739 if (ss.str() != "") ss << ",";
740 ss << "'" << *iter << "'";
741 iter++;
742 }
743 return ss.str();
744 }
745
746 String DeviceCreationParameterString::Value() {
747 return sVal;
748 }
749
750 void DeviceCreationParameterString::SetValue(String val) throw (LinuxSamplerException) {
751 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
752 if (val.find("\'") != String::npos) throw LinuxSamplerException("Character -> \' <- not allowed");
753 if (val.find("\"") != String::npos) throw LinuxSamplerException("Character -> \" <- not allowed");
754 OnSetValue(val);
755 sVal = val;
756 }
757
758
759
760 // *************** DeviceCreationParameterStrings ***************
761 // *
762
763 DeviceCreationParameterStrings::DeviceCreationParameterStrings() {
764 }
765
766 DeviceCreationParameterStrings::DeviceCreationParameterStrings(std::vector<String> sVals) {
767 this->sVals = sVals;
768 }
769
770 DeviceCreationParameterStrings::DeviceCreationParameterStrings(String val) throw (LinuxSamplerException) {
771 this->sVals = __parse_strings(val);
772 }
773
774 void DeviceCreationParameterStrings::InitWithDefault() {
775 std::map<String,String> Parameters; // empty parameters vector
776 optional<std::vector<String> > defaultval = DefaultAsStrings(Parameters);
777 this->sVals = (defaultval) ? *defaultval : std::vector<String>();
778 }
779
780 String DeviceCreationParameterStrings::Type() {
781 return "STRING";
782 }
783
784 bool DeviceCreationParameterStrings::Multiplicity() {
785 return true;
786 }
787
788 optional<String> DeviceCreationParameterStrings::RangeMin(std::map<String,String> Parameters) {
789 return optional<String>::nothing;
790 }
791
792 optional<String> DeviceCreationParameterStrings::RangeMax(std::map<String,String> Parameters) {
793 return optional<String>::nothing;
794 }
795
796 optional<String> DeviceCreationParameterStrings::Possibilities(std::map<String,String> Parameters) {
797 std::vector<String> possibilities = PossibilitiesAsString(Parameters);
798 if (possibilities.empty()) return optional<String>::nothing;
799
800 std::stringstream ss;
801 std::vector<String>::iterator iter = possibilities.begin();
802 while (iter != possibilities.end()) {
803 if (ss.str() != "") ss << ",";
804 ss << "'" << *iter << "'";
805 iter++;
806 }
807 return ss.str();
808 }
809
810 String DeviceCreationParameterStrings::Value() {
811 String result;
812 std::vector<String>::iterator iter = this->sVals.begin();
813 while (iter != this->sVals.end()) {
814 if (result != "") result += ",";
815 result += "'" + *iter + "'";
816 iter++;
817 }
818 return result;
819 }
820
821 void DeviceCreationParameterStrings::SetValue(String val) throw (LinuxSamplerException) {
822 if (Fix()) throw LinuxSamplerException("Device parameter is read only");
823 std::vector<String> vS = __parse_strings(val);
824 OnSetValue(vS);
825 SetValue(vS);
826 }
827
828 std::vector<String> DeviceCreationParameterStrings::ValueAsStrings() {
829 return sVals;
830 }
831
832 void DeviceCreationParameterStrings::SetValue(std::vector<String> vS) {
833 sVals = vS;
834 }
835
836 } // namespace LinuxSampler

  ViewVC Help
Powered by ViewVC