Пример #1
0
        dynamic?IRefactorEntity.MatchNode(object key)
        {
            Parent.EnsureSchemaMigration();

            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            if (!Key.SystemReturnType !.IsAssignableFrom(key.GetType()))
            {
                throw new InvalidCastException(string.Format("The key for entity '{0}' is of type '{1}', but the supplied key is of type '{2}'.", Name, Key.SystemReturnType.Name, key.GetType().Name));
            }

            DynamicEntity value;

            if (!staticData.TryGetValue(key, out value))
            {
                throw new ArgumentOutOfRangeException($"Only statically created data (via the upgrade script) can be loaded here.");
            }

            if (Parser.ShouldExecute)
            {
                return(DynamicEntity.Load(this, key));
            }
            else
            {
                return(value);
            }
        }
Пример #2
0
        public bool TryGetValue(TKey key, out object value)
        {
            var incr = Interlocked.Increment(ref _locker);

            if (incr != 1L)
            {
                NewMethod();
            }

            var found = _inner.TryGetValue(key, out var h);

            if (found) // TODO what is GC between the lines?
            {
                if (h.IsAllocated)
                {
                    value = h.Target;
                }
                else
                {
                    _inner.Remove(key);
                    h.Free();
                    value = null;
                    found = false;
                }
            }
            else
            {
                value = null;
            }

            Volatile.Write(ref _locker, 0L);

            return(found);
        }
        public static ModWorld GetOrCreate(CModInfo modInfo)
        {
            if (s_WorldsModIdLookup.TryGetValue(modInfo.Id, out var world))
            {
                return(world);
            }

            return(new ModWorld(modInfo));
        }
Пример #4
0
        public static unsafe T GetOrigTrampoline <T>(this MethodBase target)
        {
            void *p = GetMethodStart(target);

            if (!_Origs.ContainsKey((long)p))
            {
                return(default(T));
            }

            ulong    key = (ulong)p;
            Type     t   = typeof(T);
            Delegate del;

            if (_OrigTrampolines.TryGetValue(key, t, out del))
            {
                return((T)(object)del);
            }

            del = (Delegate)(object)CreateTrampolineDirect <T>(target);
            _OrigTrampolines[key, t] = del;
            return((T)(object)del);
        }