1
2
3
4
5
6
7
8
9
|
1
2
3
4
5
6
7
8
9
|
-
+
|
/*
* Copyright (c) 2012, Jonathan Schleifer <js@webkeks.org>
* Copyright (c) 2012, 2019, Jonathan Schleifer <js@webkeks.org>
*
* https://heap.zone/objxmpp/
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice is present in all copies.
*
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
-
-
+
+
|
self = [super init];
@try {
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
_file = [file copy];
@try {
_data = [[[OFData dataWithContentsOfFile: file]
messagePackValue] retain];
_data = [[OFData dataWithContentsOfFile: file]
.messagePackValue copy];
} @catch (id e) {
_data = [[OFMutableDictionary alloc] init];
}
[pool release];
} @catch (id e) {
[self release];
|
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
-
+
-
+
-
+
|
[_data release];
[super dealloc];
}
- (void)save
{
[[_data messagePackRepresentation] writeToFile: _file];
[_data.messagePackRepresentation writeToFile: _file];
}
- (void)xmpp_setObject: (id)object
forPath: (OFString *)path
{
OFArray *pathComponents = [path componentsSeparatedByString: @"."];
OFMutableDictionary *iter = _data;
size_t i = 0, components = [pathComponents count];
size_t i = 0, components = pathComponents.count;
for (OFString *component in pathComponents) {
if (i++ == components - 1)
continue;
OFMutableDictionary *iter2 = [iter objectForKey: component];
if (iter2 == nil) {
iter2 = [OFMutableDictionary dictionary];
[iter setObject: iter2
forKey: component];
}
iter = iter2;
}
if (object != nil)
[iter setObject: object
forKey: [pathComponents lastObject]];
else
[iter removeObjectForKey: [pathComponents lastObject]];
[iter removeObjectForKey: pathComponents.lastObject];
}
- (id)xmpp_objectForPath: (OFString *)path
{
id object = _data;
for (OFString *component in [path componentsSeparatedByString: @"."])
|