' Licensed under the Apache License, Version 2.0 (the "License");
' you may not use this file except in compliance with the License.
' You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
' Unless required by  applicable law or agreed to in writing, software distributed under the License is distributed
' on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' See the License for the specific language governing permissions and limitations under the License.

@startuml

hide empty members

class HdrStrHeap << (V, green) >> {
  Storage for strings.
  ==
  Extended Storage
}

class StrHeapDesc {
  m_ref_count_ptr
  m_heap_start
  m_heap_len
  m_locked
}

HdrStrHeap --|> RefCountObj
StrHeapDesc --o RefCountObj : m_ref_count_ptr

note left of HdrStrHeap : Storage for strings in\nheap objects.

class HdrHeap << (V, green) >> {
 Storage for objects.
 ==
 Extended Storage
}

class HdrHeapObjImpl {
  m_type
  m_length
  m_obj_flags
}

HdrHeap --* "3" StrHeapDesc : m_ronly_heap
HdrHeap --o HdrStrHeap : m_read_write_heap
HdrHeap --o HdrHeap : next

note left of HdrHeap : Heap storage for objects

abstract class HdrHeapObjImpl

HdrHeap --o "*" HdrHeapObjImpl : [heap storage]

@enduml
