diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/xml/XMLParameters.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/xml/XMLParameters.cpp')
-rw-r--r-- | Src/xml/XMLParameters.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Src/xml/XMLParameters.cpp b/Src/xml/XMLParameters.cpp new file mode 100644 index 00000000..487cea9a --- /dev/null +++ b/Src/xml/XMLParameters.cpp @@ -0,0 +1,131 @@ +#include "XMLParameters.h" +#include <wchar.h> + +#ifdef __APPLE__ +#include <Carbon/Carbon.h> +int _wcsicmp(const wchar_t *str1, const wchar_t *str2) +{ + CFStringRef cfstr1 = CFStringCreateWithBytes(kCFAllocatorDefault, (UInt8 *)str1, wcslen(str1)*sizeof(wchar_t), kCFStringEncodingUTF32, false); + CFStringRef cfstr2 = CFStringCreateWithBytes(kCFAllocatorDefault, (UInt8 *)str2, wcslen(str2)*sizeof(wchar_t), kCFStringEncodingUTF32, false); + int result = CFStringCompare(cfstr1, cfstr2, kCFCompareCaseInsensitive); + CFRelease(cfstr1); + CFRelease(cfstr2); + return result; +} +#endif + +XMLParameters::XMLParameters(const wchar_t **_parameters) +: parameters(_parameters), numParameters(0), numParametersCalculated(false) +{ +} + +void XMLParameters::CountTo(int x) +{ + if (numParametersCalculated || x < numParameters) + return; + + while (1) + { + if (parameters[numParameters*2] == 0) + { + numParametersCalculated=true; + return; + } + numParameters++; + if (numParameters == x) + return; + } +} + +void XMLParameters::Count() +{ + if (numParametersCalculated) + return; + + while (1) + { + if (parameters[numParameters*2] == 0) + { + numParametersCalculated=true; + return; + } + numParameters++; + } +} + +const wchar_t *XMLParameters::GetItemName(int i) +{ + CountTo(i); + if (i < numParameters) + return parameters[i*2]; + else + return 0; +} + +const wchar_t *XMLParameters::GetItemValueIndex(int i) +{ + CountTo(i); + if (i < numParameters) + return parameters[i*2+1]; + else + return 0; +} + +int XMLParameters::GetNumItems() +{ + Count(); + return numParameters; +} + +const wchar_t *XMLParameters::GetItemValue(const wchar_t *name) +{ + int i=0; + while(1) + { + CountTo(i+1); + if (i<numParameters) + { + if (!_wcsicmp(name, parameters[i*2])) + return parameters[i*2+1]; + } + else + return 0; + i++; + }; +} + +int XMLParameters::GetItemValueInt(const wchar_t *name, int def) +{ + const wchar_t *val = GetItemValue(name); + if (val && *val) + return wcstol(val, 0, 10); + else + return def; +} + +const wchar_t *XMLParameters::EnumItemValues(const wchar_t *name, int nb) +{ + int i=0; + while(1) + { + CountTo(i+1); + if (i<numParameters) + { + if (!_wcsicmp(name, parameters[i*2]) && nb--) + return parameters[i*2+1]; + } + else + return 0; + i++; + }; +} + +#define CBCLASS XMLParameters +START_DISPATCH; +CB(XMLREADERPARAMS_GETITEMNAME, GetItemName) +CB(XMLREADERPARAMS_GETITEMVALUE, GetItemValueIndex) +CB(XMLREADERPARAMS_GETITEMVALUE2, GetItemValue) +CB(XMLREADERPARAMS_ENUMITEMVALUES, EnumItemValues) +CB(XMLREADERPARAMS_GETNBITEMS, GetNumItems) +END_DISPATCH; +#undef CBCLASS
\ No newline at end of file |