7
7
CountPtr_PInteger
8
8
CountPtr_PByte
9
9
libname
10
+ dssctx
11
+ is_prime
10
12
end
11
13
methods
12
- function obj = APIUtil()
14
+ function obj = APIUtil(create )
13
15
14
16
if getenv(' DSS_EXTENSIONS_DEBUG' ) == ' 1'
15
17
warnings .warn(' Environment variable DSS_EXTENSIONS_DEBUG=1 is set: loading the debug version of the DSS C-API library' )
16
18
obj.libname = ' dss_capid' ;
17
19
else
18
20
obj.libname = ' dss_capi' ;
19
21
end
20
-
22
+
21
23
MfilePath = fileparts(mfilename(' fullpath' ));
22
24
DLLfilePath = fullfile(MfilePath , obj .libname );
23
25
PropertiesMOfilePath = fullfile(MfilePath , ' messages' , ' properties-en-US.mo' );
24
26
DSS_MATLAB .librefcount(1 );
25
27
if libisloaded(obj .libname )
28
+ if (nargin > 0 ) && (create ~= 0 )
29
+ obj.dssctx = calllib(obj .libname , ' ctx_New' );
30
+ obj.is_prime = 0 ;
31
+ else
32
+ obj.dssctx = calllib(obj .libname , ' ctx_Get_Prime' );
33
+ obj.is_prime = 1 ;
34
+ end
26
35
return ;
27
36
end
28
37
orig_state = warning ;
36
45
end
37
46
calllib(obj .libname , ' DSS_Start' , 0 );
38
47
calllib(obj .libname , ' DSS_SetPropertiesMO' , PropertiesMOfilePath );
48
+ if (nargin > 0 ) && (create ~= 0 )
49
+ obj.dssctx = calllib(obj .libname , ' ctx_New' );
50
+ obj.is_prime = 0 ;
51
+ else
52
+ obj.dssctx = calllib(obj .libname , ' ctx_Get_Prime' );
53
+ obj.is_prime = 1 ;
54
+ end
39
55
warning(orig_state );
40
56
end
41
57
42
58
function delete(obj )
59
+ if obj .is_prime ~= 0
60
+ calllib(obj .libname , ' ctx_Dispose' , obj .dssctx );
61
+ end
62
+
43
63
% If nothing is using the library, unload it.
44
64
% Required to properly exit MATLAB.
45
65
cnt = DSS_MATLAB .librefcount(-1 );
46
66
if (cnt == 0 )
47
- calllib(obj .libname , ' Text_Set_Command' , ' Set Parallel=no' );
48
- calllib(obj .libname , ' DSS_ClearAll' );
67
+ prime_ctx = calllib(obj .libname , ' ctx_Get_Prime' )
68
+ calllib(obj .libname , ' ctx_Text_Set_Command' , prime_ctx , ' Set Parallel=no' );
69
+ calllib(obj .libname , ' ctx_DSS_ClearAll' , prime_ctx );
49
70
unloadlibrary(obj .libname );
50
71
end
51
72
end
52
73
53
74
function obj = InitBuffers(obj )
54
- % obj.DataPtr_PDouble = calllib(obj.libname, 'DSS_GR_DataPtr_PDouble' );
55
- % obj.DataPtr_PInteger = calllib(obj.libname, 'DSS_GR_DataPtr_PInteger' );
56
- % obj.DataPtr_PByte = calllib(obj.libname, 'DSS_GR_DataPtr_PByte' );
57
- obj.CountPtr_PDouble = calllib(obj .libname , ' DSS_GR_CountPtr_PDouble ' );
58
- obj.CountPtr_PInteger = calllib(obj .libname , ' DSS_GR_CountPtr_PInteger ' );
59
- obj.CountPtr_PByte = calllib(obj .libname , ' DSS_GR_CountPtr_PByte ' );
75
+ % obj.DataPtr_PDouble = calllib(obj.libname, 'ctx_DSS_GR_DataPtr_PDouble', obj.dssctx );
76
+ % obj.DataPtr_PInteger = calllib(obj.libname, 'ctx_DSS_GR_DataPtr_PInteger', obj.dssctx );
77
+ % obj.DataPtr_PByte = calllib(obj.libname, 'ctx_DSS_GR_DataPtr_PByte', obj.dssctx );
78
+ obj.CountPtr_PDouble = calllib(obj .libname , ' ctx_DSS_GR_CountPtr_PDouble ' , obj . dssctx );
79
+ obj.CountPtr_PInteger = calllib(obj .libname , ' ctx_DSS_GR_CountPtr_PInteger ' , obj . dssctx );
80
+ obj.CountPtr_PByte = calllib(obj .libname , ' ctx_DSS_GR_CountPtr_PByte ' , obj . dssctx );
60
81
61
82
% if (obj.DataPtr_PDouble.isNull || obj.DataPtr_PDouble.isNull || obj.DataPtr_PByte.isNull)
62
83
% disp('Null-pointer return from the API! Cannot continue!');
@@ -75,19 +96,19 @@ function delete(obj)
75
96
76
97
77
98
function result = get_float64_gr_array(obj )
78
- data = calllib(obj .libname , ' DSS_GR_DataPtr_PDouble ' );
99
+ data = calllib(obj .libname , ' ctx_DSS_GR_DataPtr_PDouble ' , obj . dssctx );
79
100
setdatatype(data , ' doublePtr' , 1 , obj .CountPtr_PDouble .Value(1 ));
80
101
result = data .Value ;
81
102
end
82
103
83
104
function result = get_int32_gr_array(obj )
84
- data = calllib(obj .libname , ' DSS_GR_DataPtr_PInteger ' );
105
+ data = calllib(obj .libname , ' ctx_DSS_GR_DataPtr_PInteger ' , obj . dssctx );
85
106
setdatatype(data , ' int32Ptr' , 1 , obj .CountPtr_PInteger .Value(1 ));
86
107
result = data .Value ;
87
108
end
88
109
89
110
function result = get_int8_gr_array(obj )
90
- data = calllib(obj .libname , ' DSS_GR_DataPtr_PByte ' );
111
+ data = calllib(obj .libname , ' ctx_DSS_GR_DataPtr_PByte ' , obj . dssctx );
91
112
setdatatype(data , ' int8Ptr' , 1 , obj .CountPtr_PByte .Value(1 ));
92
113
result = data .Value ;
93
114
end
0 commit comments