projects/wms-framework/src/lib/baseframework/Hashable.ts
        
Interface for objects which can be used in hash structures (like Dictionary).
| Methods | 
| Equals | ||||||
| Equals(obj: any) | ||||||
| 
                        Parameters :
                         
 
                        Returns :          boolean | 
| GetHashCode | 
| GetHashCode() | 
| 
                        Returns :          number | 
import { ClassType } from './ReflectionSupport';
/**
 * Interface for objects which can be used in hash structures (like `Dictionary`).
 *
 * @export
 * @interface Hashable
 */
export interface Hashable {
  GetHashCode(): number;
  Equals(obj: any): boolean;
}
/**
 * Contains utilitary functions related to hashing.
 *
 * @export
 * @class HashUtils
 */
export class HashUtils {
  /**
   * Creates an instance of HashUtils.
   *
   * @private
   * @memberof HashUtils
   */
  private constructor() {}
  /**
   * Check if the given class type implements the `Hashable` interface.
   *
   * @static
   * @param {ClassType} type
   * @return {*}  {boolean}
   * @memberof HashUtils
   */
  static isHashable(type: ClassType): boolean {
    return (
      typeof (type as any)?.prototype?.Equals === 'function' &&
      typeof (type as any)?.prototype?.GetHashCode === 'function'
    );
  }
  /**
   * Calculates a hash code for the given string.
   *
   * @static
   * @param {string} input
   * @return {*}  {number}
   * @memberof HashUtils
   */
  static stringToHash(input: string): number {
    let hash = 0;
    for (let i = 0; i < input.length; i++) {
      hash = input.charCodeAt(i) * 31 + hash * 2;
    }
    return hash;
  }
}