/// <summary>Gets the bit-register for the specified entity system.</summary>
        /// <param name="entitySystem">The entity system.</param>
        /// <returns>The bit flag register for the specified system.</returns>
        public static BigInteger GetBitFor(EntitySystem entitySystem)
        {
            BigInteger bit;
            if (SystemBits.TryGetValue(entitySystem, out bit) == false)
            {
            #if WINDOWS_PHONE || XBOX || PORTABLE
                bit = 1 << position;
            #else
                bit = 1L << position;
            #endif
                ++position;
                SystemBits.Add(entitySystem, bit);
            }

            return bit;
        }
        /// <summary>Gets the bit-register for the specified entity system.</summary>
        /// <param name="entitySystem">The entity system.</param>
        /// <returns>The bit flag register for the specified system.</returns>
        public BigInteger GetBitFor(EntitySystem entitySystem)
        {
            BigInteger bit;
            if (this.systemBits.TryGetValue(entitySystem, out bit) == false)
            {
#if WINDOWS_PHONE || XBOX || PORTABLE || FORCEINT32
                if (this.position == 32)
                {
                    // bit is going to overflow and become 1 again
                    throw new InvalidOperationException("EntitySystem instances limit reached: number of EntitySystem instances is restricted to 32 in the current Artemis build.");
                }

                bit = 1 << this.position;
#else
                bit = 1L << this.position;
#endif
                this.position++;
                this.systemBits.Add(entitySystem, bit);
            }

            return bit;
        }
 /// <summary>Initializes a new instance of the <see cref="EntityProcessingSystem"/> class.</summary>
 /// <param name="requiredType">The required Type.</param>
 /// <param name="otherTypes">The optional other types.</param>
 protected EntityProcessingSystem(Type requiredType, params Type[] otherTypes)
     : base(EntitySystem.GetMergedTypes(requiredType, otherTypes))
 {
 }