Struct CodePoint
  
  Represents a Unicode value ([ U+0000..U+10FFFF ], inclusive).
 
  
  
  
  
  Assembly: SixLabors.Fonts.dll
  Syntax
  
    public readonly struct CodePoint : IComparable, IComparable<CodePoint>, IEquatable<CodePoint>
   
  
  
  Constructors
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  CodePoint(Char)
  Initializes a new instance of the CodePoint struct.
 
  
  Declaration
  
    public CodePoint(char value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Char | 
        value | 
        The char representing the UTF-16 code unit 
 | 
      
    
  
  Exceptions
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  CodePoint(Char, Char)
  Initializes a new instance of the CodePoint struct.
 
  
  Declaration
  
    public CodePoint(char highSurrogate, char lowSurrogate)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Char | 
        highSurrogate | 
        A char representing a UTF-16 high surrogate code unit. 
 | 
      
      
        | Char | 
        lowSurrogate | 
        A char representing a UTF-16 low surrogate code unit. 
 | 
      
    
  
  Exceptions
  
    
      
        | Type | 
        Condition | 
      
    
    
      
        | ArgumentOutOfRangeException | 
        If highSurrogate does not represent a UTF-16 high surrogate code unit
or lowSurrogate does not represent a UTF-16 low surrogate code unit. 
 | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  CodePoint(Int32)
  Initializes a new instance of the CodePoint struct.
 
  
  Declaration
  
    public CodePoint(int value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Int32 | 
        value | 
        The value to create the codepoint. 
 | 
      
    
  
  Exceptions
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  CodePoint(UInt32)
  Initializes a new instance of the CodePoint struct.
 
  
  Declaration
  
    public CodePoint(uint value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | UInt32 | 
        value | 
        The value to create the codepoint. 
 | 
      
    
  
  Exceptions
  
  Properties
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsAscii
  Gets a value indicating whether this value is ASCII ([ U+0000..U+007F ])
and therefore representable by a single UTF-8 code unit.
 
  
  Declaration
  
    public readonly bool IsAscii { get; }
   
  Property Value
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsBmp
  Gets a value indicating whether this value is within the BMP ([ U+0000..U+FFFF ])
and therefore representable by a single UTF-16 code unit.
 
  
  Declaration
  
    public readonly bool IsBmp { get; }
   
  Property Value
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Plane
  Gets the Unicode plane (0 to 16, inclusive) which contains this scalar.
 
  
  Declaration
  
    public readonly int Plane { get; }
   
  Property Value
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  ReplacementChar
  Gets a CodePoint instance that represents the Unicode replacement character U+FFFD.
 
  
  Declaration
  
    public static readonly CodePoint ReplacementChar { get; }
   
  Property Value
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Utf16SequenceLength
  Gets the length in code units (Char) of the
UTF-16 sequence required to represent this scalar value.
 
  
  Declaration
  
    public readonly int Utf16SequenceLength { get; }
   
  Property Value
  
  
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Utf8SequenceLength
  Gets the length in code units of the
UTF-8 sequence required to represent this scalar value.
 
  
  Declaration
  
    public readonly int Utf8SequenceLength { get; }
   
  Property Value
  
  
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Value
  Gets the Unicode value as an integer.
 
  
  Declaration
  
    public readonly int Value { get; }
   
  Property Value
  
  Methods
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  CompareTo(CodePoint)
  
  
  Declaration
  
    public readonly int CompareTo(CodePoint other)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Equals(CodePoint)
  
  
  Declaration
  
    public readonly bool Equals(CodePoint other)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Equals(Object)
  
  
  Declaration
  
    public override readonly bool Equals(object obj)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Object | 
        obj | 
         | 
      
    
  
  Returns
  
  Overrides
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GetBidiClass(CodePoint)
  
  
  Declaration
  
    public static BidiClass GetBidiClass(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GetCodePointCount(ReadOnlySpan<Char>)
  Returns the number of codepoints in a given string buffer.
 
  
  Declaration
  
    public static int GetCodePointCount(ReadOnlySpan<char> source)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GetGeneralCategory(CodePoint)
  
  
  Declaration
  
    public static UnicodeCategory GetGeneralCategory(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GetGraphemeClusterClass(CodePoint)
  
  
  Declaration
  
    public static GraphemeClusterClass GetGraphemeClusterClass(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GetHashCode()
  
  
  Declaration
  
    public override readonly int GetHashCode()
   
  Returns
  
  Overrides
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GetLineBreakClass(CodePoint)
  
  
  Declaration
  
    public static LineBreakClass GetLineBreakClass(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsControl(CodePoint)
  Gets a value indicating whether the given codepoint is a control character.
 
  
  Declaration
  
    public static bool IsControl(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a control character; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsDigit(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a decimal digit.
 
  
  Declaration
  
    public static bool IsDigit(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a decimal digit; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsLetter(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a letter.
 
  
  Declaration
  
    public static bool IsLetter(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a letter; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsLetterOrDigit(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a letter or decimal digit.
 
  
  Declaration
  
    public static bool IsLetterOrDigit(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a letter or decimal digit; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsLower(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a lowercase letter.
 
  
  Declaration
  
    public static bool IsLower(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a lowercase letter; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsMark(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a mark.
 
  
  Declaration
  
    public static bool IsMark(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a symbol; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsNewLine(CodePoint)
  Gets a value indicating whether the given codepoint is a new line indicator.
 
  
  Declaration
  
    public static bool IsNewLine(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a new line indicator; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsNonBreakingSpace(CodePoint)
  Gets a value indicating whether the given codepoint is a non-breaking space.
 
  
  Declaration
  
    public static bool IsNonBreakingSpace(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a non-breaking space character; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsNumber(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a number.
 
  
  Declaration
  
    public static bool IsNumber(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a number; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsPunctuation(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as punctuation.
 
  
  Declaration
  
    public static bool IsPunctuation(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is punctuation; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsSeparator(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a separator.
 
  
  Declaration
  
    public static bool IsSeparator(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a separator; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsSymbol(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as a symbol.
 
  
  Declaration
  
    public static bool IsSymbol(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a symbol; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsTabulation(CodePoint)
  Gets a value indicating whether the given codepoint is a tabulation indicator.
 
  
  Declaration
  
    public static bool IsTabulation(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a tabulation indicator; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsUpper(CodePoint)
  Returns a value that indicates whether the specified codepoint is categorized as an uppercase letter.
 
  
  Declaration
  
    public static bool IsUpper(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a uppercase letter; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsValid(Int32)
  Returns true if value is a valid Unicode code
point, i.e., is in [ U+0000..U+10FFFF ], inclusive.
 
  
  Declaration
  
    public static bool IsValid(int value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Int32 | 
        value | 
        The value to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if value represents a valid codepoint; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsValid(UInt32)
  Returns true if value is a valid Unicode code
point, i.e., is in [ U+0000..U+10FFFF ], inclusive.
 
  
  Declaration
  
    public static bool IsValid(uint value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | UInt32 | 
        value | 
        The value to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if value represents a valid codepoint; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsVariationSelector(CodePoint)
  
  
  Declaration
  
    public static bool IsVariationSelector(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a variation selector character; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsWhiteSpace(CodePoint)
  Gets a value indicating whether the given codepoint is white space.
 
  
  Declaration
  
    public static bool IsWhiteSpace(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a whitespace character; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsZeroWidthJoiner(CodePoint)
  Gets a value indicating whether the given codepoint is a zero-width-joiner.
 
  
  Declaration
  
    public static bool IsZeroWidthJoiner(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a zero-width-joiner character; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IsZeroWidthNonJoiner(CodePoint)
  Gets a value indicating whether the given codepoint is a zero-width-non-joiner.
 
  
  Declaration
  
    public static bool IsZeroWidthNonJoiner(CodePoint codePoint)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The codepoint to evaluate. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if codePoint is a zero-width-non-joiner character; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  ToString()
  
  
  Declaration
  
    public override readonly string ToString()
   
  Returns
  
  Overrides
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  TryGetBidiMirror(CodePoint, out CodePoint)
  
  
  Declaration
  
    public static bool TryGetBidiMirror(CodePoint codePoint, out CodePoint mirror)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The code point to be mapped. 
 | 
      
      
        | CodePoint | 
        mirror | 
        When this method returns, contains the codepoint representing the bidi mirror for this instance;
otherwise, the default value for the type of the codePoint parameter.
This parameter is passed uninitialized.
. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if this instance has a mirror; otherwise, false | 
      
    
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  TryGetVerticalMirror(CodePoint, out CodePoint)
  
  
  Declaration
  
    public static bool TryGetVerticalMirror(CodePoint codePoint, out CodePoint mirror)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | CodePoint | 
        codePoint | 
        The code point to be mapped. 
 | 
      
      
        | CodePoint | 
        mirror | 
        When this method returns, contains the codepoint representing the vertical mirror for this instance;
otherwise, the default value for the type of the codePoint parameter.
This parameter is passed uninitialized.
. 
 | 
      
    
  
  Returns
  
    
      
        | Type | 
        Description | 
      
    
    
      
        | Boolean | 
        true if this instance has a mirror; otherwise, false | 
      
    
  
  Operators
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Equality(CodePoint, CodePoint)
  
  
  Declaration
  
    public static bool operator ==(CodePoint left, CodePoint right)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Explicit(Char to CodePoint)
  
  
  Declaration
  
    public static explicit operator CodePoint(char ch)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Char | 
        ch | 
         | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Explicit(Int32 to CodePoint)
  
  
  Declaration
  
    public static explicit operator CodePoint(int value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Int32 | 
        value | 
         | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Explicit(UInt32 to CodePoint)
  
  
  Declaration
  
    public static explicit operator CodePoint(uint value)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | UInt32 | 
        value | 
         | 
      
    
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GreaterThan(CodePoint, CodePoint)
  
  
  Declaration
  
    public static bool operator>(CodePoint left, CodePoint right)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  GreaterThanOrEqual(CodePoint, CodePoint)
  
  
  Declaration
  
    public static bool operator >=(CodePoint left, CodePoint right)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  Inequality(CodePoint, CodePoint)
  
  
  Declaration
  
    public static bool operator !=(CodePoint left, CodePoint right)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  LessThan(CodePoint, CodePoint)
  
  
  Declaration
  
    public static bool operator <(CodePoint left, CodePoint right)
   
  Parameters
  
  Returns
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  LessThanOrEqual(CodePoint, CodePoint)
  
  
  Declaration
  
    public static bool operator <=(CodePoint left, CodePoint right)
   
  Parameters
  
  Returns
  
  Explicit Interface Implementations
  
  
    |
    Improve this Doc
  
  
    View Source
  
  
  IComparable.CompareTo(Object)
  
  
  Declaration
  
    readonly int IComparable.CompareTo(object obj)
   
  Parameters
  
    
      
        | Type | 
        Name | 
        Description | 
      
    
    
      
        | Object | 
        obj | 
         | 
      
    
  
  Returns
  
  Implements