/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import @protocol SKSonarValueCoder + (instancetype)fromSonarValue:(id)sonarValue; - (NSDictionary>*)sonarValue; @end class SKObject { public: SKObject(CGRect rect); SKObject(CGSize size); SKObject(CGPoint point); SKObject(UIEdgeInsets insets); SKObject(CGAffineTransform transform); SKObject(id value); SKObject(id value); operator id() const noexcept { return _actual ?: [NSNull null]; } protected: id _actual; }; class SKMutableObject : public SKObject { public: SKMutableObject(CGRect rect) : SKObject(rect) {} SKMutableObject(CGSize size) : SKObject(size){}; SKMutableObject(CGPoint point) : SKObject(point){}; SKMutableObject(UIEdgeInsets insets) : SKObject(insets){}; SKMutableObject(CGAffineTransform transform) : SKObject(transform){}; SKMutableObject(id value) : SKObject(value){}; SKMutableObject(id value) : SKObject(value){}; operator id() { convertToMutable(); return _actual; } protected: BOOL _convertedToMutable = NO; void convertToMutable(); };