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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 226 - (hide annotations) (download)
Wed Aug 25 22:00:33 2004 UTC (19 years, 8 months ago) by schoenebeck
File size: 31072 byte(s)
* ALSA MIDI driver: create one MIDI port by default, implemented parameter
  info for parameter 'ALSA_SEQ_BINDINGS'
* ALSA audio driver: implemented parameter info for driver parameters
  'FRAGMENTS' and 'FRAGMENTSIZE'
* JACK audio driver: fixed creation of channels on device creation, channel
  parameter 'NAME' now actually updates the respective JACK port name,
  implemented channel parameter 'JACK_BINDINGS' (as well as its parameter
  info)
* src/network/lscpserver.cpp: fixed commands
  "GET MIDI_INPUT_DRIVER_PARAMETER INFO" and
  "GET AUDIO_OUTPUT_DRIVER_PARAMETER  INFO", fixed backward compatibility
  for "SET AUDIO_OUTPUT_TYPE" and "SET MIDI_INPUT_TYPE" commands
* src/networ/lscp.y: added comma character (',') to symbol 'char'
* src/drivers/DeviceParameter.cpp: fixed methods RangeMin(), RangeMax() in
  class DeviceCreationParameterInt which returned wrong values

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

  ViewVC Help
Powered by ViewVC