Esempio n. 1
0
		/// <summary>
		/// Raises an appropriate ScriptRuntimeException if the specified access is not supported.
		/// Checks are made for the MemberDescriptorAccess permissions AND for the access of instance
		/// members through static userdatas.
		/// </summary>
		/// <param name="desc">The desc.</param>
		/// <param name="access">The access.</param>
		/// <param name="obj">The object to be checked for access.</param>
		public static void CheckAccess(this IMemberDescriptor desc, MemberDescriptorAccess access, object obj)
		{
			if (!desc.IsStatic && obj == null)
				throw ScriptRuntimeException.AccessInstanceMemberOnStatics(desc);

			if (access.HasAllFlags(MemberDescriptorAccess.CanExecute) && !desc.CanExecute())
				throw new ScriptRuntimeException("userdata member {0} cannot be called.", desc.Name);

			if (access.HasAllFlags(MemberDescriptorAccess.CanWrite) && !desc.CanWrite())
				throw new ScriptRuntimeException("userdata member {0} cannot be assigned to.", desc.Name);

			if (access.HasAllFlags(MemberDescriptorAccess.CanRead) && !desc.CanRead())
				throw new ScriptRuntimeException("userdata member {0} cannot be read from.", desc.Name);
		}
Esempio n. 2
0
 public static IOMode CloseWrite(this IOMode mode) {
     return (mode & ~IOMode.ReadWriteMask) | (mode.CanRead() ? IOMode.ReadOnly : IOMode.Closed);
 }
Esempio n. 3
0
        /// <summary>
        /// Tries to reads a compressed unsigned integer from the stream.
        /// </summary>
        /// <param name="reader">The reader to use for reading the data.</param>
        /// <param name="value">The unsigned integer that was read from the stream.</param>
        /// <returns><c>True</c> if the method succeeded, false otherwise.</returns>
        public static bool TryReadCompressedUInt32(this IBinaryStreamReader reader, out uint value)
        {
            value = 0;
            if (!reader.CanRead(sizeof(byte)))
                return false;

            var firstByte = reader.ReadByte();
            reader.Position--;

            if (((firstByte & 0x80) == 0 && reader.CanRead(sizeof(byte))) ||
                ((firstByte & 0x40) == 0 && reader.CanRead(sizeof(ushort))) ||
                (reader.CanRead(sizeof(uint))))
            {
                value = ReadCompressedUInt32(reader);
                return true;
            }

            return false;
        }