//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOAuth { using System; using System.Collections.Generic; using System.Globalization; using System.Reflection; /// /// A grab-bag utility class. /// internal static class Util { /// /// Gets a human-readable description of the library name and version, including /// whether the build is an official or private one. /// public static string LibraryVersion { get { string assemblyFullName = Assembly.GetExecutingAssembly().FullName; bool official = assemblyFullName.Contains("PublicKeyToken=2780ccd10d57b246"); // We use InvariantCulture since this is used for logging. return string.Format(CultureInfo.InvariantCulture, "{0} ({1})", assemblyFullName, official ? "official" : "private"); } } /// /// Enumerates through the individual set bits in a flag enum. /// /// The flags enum value. /// An enumeration of just the set bits in the flags enum. internal static IEnumerable GetIndividualFlags(Enum flags) { long flagsLong = Convert.ToInt64(flags); for (int i = 0; i < sizeof(long) * 8; i++) { // long is the type behind the largest enum // Select an individual application from the scopes. long individualFlagPosition = (long)Math.Pow(2, i); long individualFlag = flagsLong & individualFlagPosition; if (individualFlag == individualFlagPosition) { yield return individualFlag; } } } } }