/
property_collection.go
75 lines (66 loc) · 2.56 KB
/
property_collection.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.
package common
// #include <stdlib.h>
// #include <speechapi_c_common.h>
// #include <speechapi_c_property_bag.h>
import "C"
import "unsafe"
// PropertyCollection is a class to retrieve or set a property value from a property collection.
type PropertyCollection struct {
handle C.SPXHANDLE
}
// GetProperty returns value of a property.
// If the property value is not defined, the specified default value is returned.
func (properties PropertyCollection) GetProperty(id PropertyID, defaultValue string) string {
defValue := C.CString(defaultValue)
defer C.free(unsafe.Pointer(defValue))
value := C.property_bag_get_string(properties.handle, (C.int)(id), nil, defValue)
goValue := C.GoString(value)
C.property_bag_free_string(value)
return goValue
}
// GetPropertyByString returns value of a property.
// If the property value is not defined, the specified default value is returned.
func (properties PropertyCollection) GetPropertyByString(name string, defaultValue string) string {
defValue := C.CString(defaultValue)
defer C.free(unsafe.Pointer(defValue))
n := C.CString(name)
defer C.free(unsafe.Pointer(n))
value := C.property_bag_get_string(properties.handle, -1, n, defValue)
goValue := C.GoString(value)
C.property_bag_free_string(value)
return goValue
}
// SetProperty sets the value of a property.
func (properties PropertyCollection) SetProperty(id PropertyID, value string) error {
v := C.CString(value)
defer C.free(unsafe.Pointer(v))
ret := uintptr(C.property_bag_set_string(properties.handle, (C.int)(id), nil, v))
if ret != C.SPX_NOERROR {
return NewCarbonError(ret)
}
return nil
}
// SetPropertyByString sets the value of a property.
func (properties PropertyCollection) SetPropertyByString(name string, value string) error {
n := C.CString(name)
defer C.free(unsafe.Pointer(n))
v := C.CString(value)
defer C.free(unsafe.Pointer(v))
ret := uintptr(C.property_bag_set_string(properties.handle, -1, n, v))
if ret != C.SPX_NOERROR {
return NewCarbonError(ret)
}
return nil
}
// Close disposes the associated resources.
func (properties PropertyCollection) Close() {
C.property_bag_release(properties.handle)
}
// NewPropertyCollectionFromHandle creates a PropertyCollection from a handle (for internal use)
func NewPropertyCollectionFromHandle(handle SPXHandle) *PropertyCollection {
propertyCollection := new(PropertyCollection)
propertyCollection.handle = uintptr2handle(handle)
return propertyCollection
}