예제 #1
0
 protected override void Destroy()
 {
     loadTables.Clear();
     loadTablesOperation.Clear();
     m_PreloadTablesOperations.Clear();
     m_TableReferences.Clear();
     GenericPool <PreLoadTablesOperation <TTable, TEntry> > .Release(this);
 }
예제 #2
0
        internal void Release()
        {
            foreach (var f in Fragments)
            {
                ReleaseFragment(f);
            }
            Fragments.Clear();

            GenericPool <Message> .Release(this);
        }
            public void Clear()
            {
                Assert.IsNotNull(m_Requests);

                foreach (var pair in m_Requests)
                {
                    pair.Value.Clear();
                    GenericPool <Set> .Release(pair.Value);
                }
                m_Requests.Clear();
            }
예제 #4
0
 /// <summary>
 /// Returns a Fragment back to its ObjectPool so it can be used again.
 /// </summary>
 /// <param name="fragment"></param>
 public void ReleaseFragment(MessageFragment fragment)
 {
     if (fragment is WritableMessageFragment wmf)
     {
         GenericPool <WritableMessageFragment> .Release(wmf);
     }
     else if (fragment is ReadOnlyMessageFragment romf)
     {
         GenericPool <ReadOnlyMessageFragment> .Release(romf);
     }
 }
예제 #5
0
 protected override void Destroy()
 {
     AddressablesInterface.Release(m_LoadTableOperation);
     GenericPool <LoadAssetOperation <TObject> > .Release(this);
 }
 protected override void Destroy()
 {
     base.Destroy();
     GenericPool <PreloadDatabaseOperation <TTable, TEntry> > .Release(this);
 }
예제 #7
0
        internal static void GetMenuOptions(int mask, string[] flagNames, int[] flagValues,
                                            out string buttonText, out string buttonMixedValuesText, out string[] optionNames, out int[] optionMaskValues, out int[] selectedOptions, Type enumType = null)
        {
            const int everythingValue   = ~0;
            bool      hasNothingName    = flagValues[0] == 0;
            bool      hasEverythingName = flagValues[flagValues.Length - 1] == everythingValue;

            var nothingName    = (hasNothingName ? flagNames[0] : "Nothing");
            var everythingName = (hasEverythingName ? flagNames[flagValues.Length - 1] : "Everything");

            var optionCount = flagNames.Length + (hasNothingName ? 0 : 1) + (hasEverythingName ? 0 : 1);
            var flagCount   = flagNames.Length - (hasNothingName ? 1 : 0) - (hasEverythingName ? 1 : 0);

            // These indices refer to flags that are not 0 and everythingValue
            var flagStartIndex = (hasNothingName ? 1 : 0);
            var flagEndIndex   = flagStartIndex + flagCount;

            // Options names
            optionNames    = GetBuffer(s_OptionNames, optionCount);
            optionNames[0] = nothingName;
            optionNames[1] = everythingName;
            for (var flagIndex = flagStartIndex; flagIndex < flagEndIndex; flagIndex++)
            {
                var optionIndex = flagIndex - flagStartIndex + 2;
                optionNames[optionIndex] = flagNames[flagIndex];
            }

            var flagMask         = 0; // Disjunction of all flags (except 0 and everythingValue)
            var intermediateMask = 0; // Mask used to compute new mask value for each options

            // Selected options
            s_SelectedOptionsSet.Clear();
            for (var flagIndex = flagStartIndex; flagIndex < flagEndIndex; flagIndex++)
            {
                var flagValue = flagValues[flagIndex];
                flagMask |= flagValue;
                if ((mask & flagValue) == flagValue)
                {
                    var optionIndex = flagIndex - flagStartIndex + 2;
                    s_SelectedOptionsSet.Add(optionIndex);
                    intermediateMask |= flagValue;
                }
            }

            // Button text
            buttonText            = null;
            buttonMixedValuesText = null;
            for (var flagIndex = flagStartIndex; flagIndex < flagEndIndex; flagIndex++)
            {
                // Check if a specific value is set.
                if (mask == flagValues[flagIndex])
                {
                    buttonText = flagNames[flagIndex];
                }
            }

            if (buttonText == null)
            {
                if (flagMask == intermediateMask)
                {
                    // If all of the available flags are set then show the Everything name.
                    s_SelectedOptionsSet.Add(1);
                    buttonText = everythingName;
                }
                else if (mask == 0 || s_SelectedOptionsSet.Count == 0)
                {
                    // If the mask is 0 or none of the actual flags are set we use the nothing name.
                    s_SelectedOptionsSet.Add(0);
                    buttonText = nothingName;
                }
                else
                {
                    buttonText = "Mixed...";

                    // Extract mixed labels
                    var sb = GenericPool <StringBuilder> .Get();

                    var iterator = s_SelectedOptionsSet.GetEnumerator();
                    iterator.MoveNext();

                    sb.Append(flagNames[iterator.Current + flagStartIndex - 2]);
                    while (iterator.MoveNext())
                    {
                        sb.Append(", ");
                        sb.Append(flagNames[iterator.Current + flagStartIndex - 2]);
                    }
                    buttonMixedValuesText = sb.ToString();

                    sb.Clear();
                    GenericPool <StringBuilder> .Release(sb);
                }
            }

            selectedOptions = GetBuffer(s_SelectedOptions, s_SelectedOptionsSet.Count);
            var x = 0;

            foreach (var selected in s_SelectedOptionsSet)
            {
                selectedOptions[x] = selected;
                ++x;
            }

            // Option mask values
            optionMaskValues    = GetBuffer(s_OptionValues, optionCount);
            optionMaskValues[0] = 0;
            optionMaskValues[1] = everythingValue;
            if (EditorGUI.showMixedValue)
            {
                intermediateMask = 0;
            }
            for (var flagIndex = flagStartIndex; flagIndex < flagEndIndex; flagIndex++)
            {
                var optionIndex = flagIndex - flagStartIndex + 2;
                var flagValue   = flagValues[flagIndex];
                var flagSet     = ((intermediateMask & flagValue) == flagValue);
                var newMask     = (flagSet ? intermediateMask & ~flagValue : intermediateMask | flagValue);

                // If all flag options are selected the mask becomes everythingValue to be consistent with the "Everything" option
                if (newMask == flagMask)
                {
                    newMask = everythingValue;
                }

                optionMaskValues[optionIndex] = newMask;
            }
        }
예제 #8
0
        internal static void GetMaskButtonValue(int mask, string[] flagNames, int[] flagValues, out string buttonText, out string buttonMixedValuesText)
        {
            const int everythingValue   = ~0;
            bool      hasNothingName    = flagValues[0] == 0;
            bool      hasEverythingName = flagValues[flagValues.Length - 1] == everythingValue;

            var nothingName    = (hasNothingName ? flagNames[0] : "Nothing");
            var everythingName = (hasEverythingName ? flagNames[flagValues.Length - 1] : "Everything");

            var flagCount = flagNames.Length - (hasNothingName ? 1 : 0) - (hasEverythingName ? 1 : 0);

            var flagStartIndex = (hasNothingName ? 1 : 0);
            var flagEndIndex   = flagStartIndex + flagCount;

            var flagMask         = 0; // Disjunction of all flags (except 0 and everythingValue)
            var intermediateMask = 0; // Mask used to compute new mask value for each options
            var usedFlags        = ListPool <int> .Get();

            buttonText            = null;
            buttonMixedValuesText = null;

            for (var flagIndex = flagStartIndex; flagIndex < flagEndIndex; flagIndex++)
            {
                var flagValue = flagValues[flagIndex];
                flagMask |= flagValue;

                if (mask == flagValues[flagIndex])
                {
                    buttonText = flagNames[flagIndex];
                }

                if ((mask & flagValue) == flagValue)
                {
                    intermediateMask |= flagValue;
                    usedFlags.Add(flagIndex);
                }
            }

            if (buttonText == null)
            {
                if (flagMask == intermediateMask)
                {
                    // If all of the available flags are set then show the Everything name.
                    buttonText = everythingName;
                }
                else if (intermediateMask == 0)
                {
                    // If the mask is 0 or none of the actual flags are set we use the nothing name.
                    buttonText = nothingName;
                }
                else
                {
                    buttonText = "Mixed...";

                    // Extract mixed labels
                    var sb = GenericPool <StringBuilder> .Get();

                    sb.Append(flagNames[usedFlags[0]]);
                    for (int i = 1; i < usedFlags.Count; ++i)
                    {
                        sb.Append(", ");
                        sb.Append(flagNames[usedFlags[i]]);
                    }
                    buttonMixedValuesText = sb.ToString();

                    sb.Clear();
                    GenericPool <StringBuilder> .Release(sb);
                }
            }

            ListPool <int> .Release(usedFlags);
        }
예제 #9
0
 protected override void Destroy()
 {
     base.Destroy();
     GenericPool <GetLocalizedStringOperation> .Release(this);
 }
예제 #10
0
 protected override void Destroy()
 {
     GenericPool <LoadTableOperation <TTable, TEntry> > .Release(this);
 }
예제 #11
0
 override public void Release()
 {
     GenericPool <XRPassUniversal> .Release(this);
 }