/// <summary>
        /// Process the given entry.
        /// </summary>
        /// <param name="entry">
        /// The <b>IInvocableCacheEntry</b> to process.
        /// </param>
        /// <param name="valueNew">
        /// The new value to update an entry with.
        /// </param>
        /// <param name="insert">
        /// Specifies whether or not an insert is allowed.
        /// </param>
        /// <param name="ret">
        /// Specifies whether or not a return value is required.
        /// </param>
        /// <returns>
        /// The result of the processing, if any.
        /// </returns>
        protected object processEntry(IInvocableCacheEntry entry, IVersionable valueNew, bool insert, bool ret)
        {
            bool         match;
            IVersionable valueCur = (IVersionable)entry.Value;

            if (valueCur == null)
            {
                match = insert;
            }
            else
            {
                IComparable verCur = valueCur.VersionIndicator;
                IComparable verNew = valueNew.VersionIndicator;

                match = (verCur.CompareTo(verNew) == 0);
            }

            if (match)
            {
                valueNew.IncrementVersion();
                entry.SetValue(valueNew, false);
                return(NO_RESULT);
            }

            return(ret ? valueCur : NO_RESULT);
        }