public bool TryGet(string key, RealmObjectBase.Metadata metadata, Realm realm, out RealmValue value)
        {
            RealmValue keyValue = key;

            var(primitiveKey, keyHandles) = keyValue.ToNative();
            var containsValue = NativeMethods.try_get_value(this, primitiveKey, out var result, out var nativeException);

            keyHandles?.Dispose();
            nativeException.ThrowIfNecessary();

            if (!containsValue)
            {
                value = default;
                return(false);
            }

            if (result.Type != RealmValueType.Object)
            {
                value = new RealmValue(result);
            }
            else
            {
                var objectHandle = result.AsObject(Root);

                if (metadata == null)
                {
                    throw new NotImplementedException("Mixed objects are not supported yet.");
                }

                value = new RealmValue(realm.MakeObject(metadata, objectHandle));
            }

            return(true);
        }
        public KeyValuePair <string, TValue> GetValueAtIndex <TValue>(int index, RealmObjectBase.Metadata metadata, Realm realm)
        {
            NativeMethods.get_at_index(this, (IntPtr)index, out var key, out var primitiveValue, out var ex);
            ex.ThrowIfNecessary();
            var value = ToRealmValue(primitiveValue, metadata, realm);

            return(new KeyValuePair <string, TValue>(key.AsString(), value.As <TValue>()));
        }
Beispiel #3
0
        public RealmValue GetValue(string propertyName, RealmObjectBase.Metadata metadata, Realm realm)
        {
            var propertyIndex = metadata.PropertyIndices[propertyName];

            NativeMethods.get_value(this, propertyIndex, out var result, out var nativeException);
            nativeException.ThrowIfNecessary();

            return(new RealmValue(result, realm, this, propertyIndex));
        }
        public RealmValue GetValueAtIndex(int index, RealmObjectBase.Metadata metadata, Realm realm)
        {
            GetValueAtIndexCore((IntPtr)index, out var result, out var nativeException);
            nativeException.ThrowIfNecessary();

            if (result.Type != RealmValueType.Object)
            {
                return(new RealmValue(result));
            }

            var objectHandle = result.AsObject(Root);

            return(new RealmValue(realm.MakeObject(metadata, objectHandle)));
        }
        protected RealmValue ToRealmValue(PrimitiveValue primitive, RealmObjectBase.Metadata metadata, Realm realm)
        {
            if (primitive.Type != RealmValueType.Object)
            {
                return(new RealmValue(primitive));
            }

            var objectHandle = primitive.AsObject(Root);

            if (metadata == null)
            {
                throw new NotImplementedException("Mixed objects are not supported yet.");
            }

            return(new RealmValue(realm.MakeObject(metadata, objectHandle)));
        }
        public RealmValue GetValue(string propertyName, RealmObjectBase.Metadata metadata, Realm realm)
        {
            var propertyIndex = metadata.PropertyIndices[propertyName];

            NativeMethods.get_value(this, propertyIndex, out var result, out var nativeException);
            nativeException.ThrowIfNecessary();

            if (result.Type != RealmValueType.Object)
            {
                return(new RealmValue(result, this, propertyIndex));
            }

            var objectHandle = result.AsObject(Root);

            metadata.Schema.TryFindProperty(propertyName, out var property);
            return(new RealmValue(realm.MakeObject(realm.Metadata[property.ObjectType], objectHandle)));
        }
Beispiel #7
0
        internal ThreadSafeReference(IThreadConfined value, Type type)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            if (!value.IsManaged)
            {
                throw new RealmException("Cannot construct reference to unmanaged object, which can be passed across threads directly.");
            }

            if (!value.IsValid)
            {
                throw new RealmException("Cannot construct reference to invalidated object.");
            }

            Handle        = value.Handle.GetThreadSafeReference();
            Metadata      = value.Metadata;
            ReferenceType = type;
        }
Beispiel #8
0
 internal RealmResultsProvider(Realm realm, RealmObjectBase.Metadata metadata)
 {
     _realm    = realm;
     _metadata = metadata;
 }
Beispiel #9
0
 internal RealmCollectionBase(Realm realm, RealmObjectBase.Metadata metadata)
 {
     Realm    = realm;
     Handle   = new Lazy <CollectionHandleBase>(GetOrCreateHandle);
     Metadata = metadata;
 }
Beispiel #10
0
 internal RealmResults(Realm realm, RealmObjectBase.Metadata metadata)
     : this(realm, metadata.Table.CreateResults(realm.SharedRealmHandle), metadata)
 {
 }
Beispiel #11
0
 internal RealmResults(Realm realm, ResultsHandle handle, RealmObjectBase.Metadata metadata)
     : this(realm, metadata, new RealmResultsProvider(realm, metadata), null)
 {
     _handle = handle;
 }
Beispiel #12
0
 internal RealmResults(Realm realm, RealmObjectBase.Metadata metadata, RealmResultsProvider realmResultsProvider, Expression expression) : base(realm, metadata)
 {
     Provider   = realmResultsProvider;
     Expression = expression ?? Expression.Constant(this);
 }
Beispiel #13
0
 internal RealmResultsVisitor(Realm realm, RealmObjectBase.Metadata metadata)
 {
     _realm    = realm;
     _metadata = metadata;
 }
Beispiel #14
0
 internal RealmList(Realm realm, ListHandle adoptedList, RealmObjectBase.Metadata metadata) : base(realm, metadata)
 {
     _listHandle = adoptedList;
 }
Beispiel #15
0
 public RealmValue GetValueAtIndex(int index, RealmObjectBase.Metadata metadata, Realm realm)
 {
     NativeMethods.get_value(this, (IntPtr)index, out var result, out var ex);
     ex.ThrowIfNecessary();
     return(ToRealmValue(result, metadata, realm));
 }
Beispiel #16
0
 internal RealmSet(Realm realm, SetHandle adoptedSet, RealmObjectBase.Metadata metadata)
     : base(realm, metadata)
 {
     _setHandle = adoptedSet;
 }
Beispiel #17
0
 internal RealmDictionary(Realm realm, DictionaryHandle adoptedDictionary, RealmObjectBase.Metadata metadata)
     : base(realm, metadata)
 {
     _dictionaryHandle = adoptedDictionary;
 }