Read standard Ifd from data buffer
IFD Offset: 0x00000001,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0x00000036
    2  0x0003  Ascii             (1)       7   0x0000003c
    3  0x0004  Ascii             (1)       9   0x00000043
Next IFD: 0x00000000
Data of entry 1:
  0037  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  003d  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  0044  4d 61 6c 61 79 73 69 61 00                       Malaysia.
Setting value of entry 3...
Wrote 76 characters to data buffer
IFD Offset: 0x00000001,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0x00000036
    2  0x0003  Ascii             (1)       7   0x0000003c
    3  0x0004  Ascii             (1)       6   0x00000043
Next IFD: 0x00000000
Data of entry 1:
  0037  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  003d  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  0044  54 48 52 45 45 00                                THREE.

Read non-standard Ifd from data buffer
IFD Offset: 0x00000016,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0xffffffea
    2  0x0003  Ascii             (1)       7   0xfffffff0
    3  0x0004  Ascii             (1)       9   0xfffffff7
Next IFD: 0x00000000
Data of entry 1:
  0000  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  0006  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  000d  4d 61 6c 61 79 73 69 61 00                       Malaysia.
Setting value of entry 3...
IFD Offset: 0x00000016,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0xffffffea
    2  0x0003  Ascii             (1)       7   0xfffffff0
    3  0x0004  Ascii             (1)       6   0xfffffff7
Next IFD: 0x00000000
Data of entry 1:
  0000  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  0006  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  000d  54 48 52 45 45 00 00 00 00                       THREE....

Test boundary checks, the following reads should generate warnings or errors
--- read (3)
Warning: Upper boundary of data for IFD0 entry 3 is out of bounds:
 Offset = 0x00000043, size = 9, exceeds buffer size by 1 Bytes; Truncating the data.
--- read (4)
Error: Upper boundary of the 1st data entry of IFD0 is out of bounds:
 Offset = 0x00000036, exceeds buffer size by 1 Bytes
Ifd::read (4) failed, rc = 6
--- read (5)
Warning: Upper boundary of data for IFD0 entry 2 is out of bounds:
 Offset = 0x0000003c, size = 7, exceeds buffer size by 7 Bytes; Truncating the data.
Warning: Upper boundary of data for IFD0 entry 3 is out of bounds:
 Offset = 0x00000043, size = 9, exceeds buffer size by 16 Bytes; Truncating the data.
--- read (6)
Error: IFD0 memory of the pointer to the next IFD lies outside of the IFD memory buffer.
Ifd::read (6) failed, rc = 6
--- read (7)
Error: IFD0 memory of the pointer to the next IFD lies outside of the IFD memory buffer.
Ifd::read (7) failed, rc = 6

Create Ifd from scratch
IFD Offset: 0x00000000,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0x00000036
    2  0x0003  Ascii             (1)       7   0x0000003c
    3  0x0004  Ascii             (1)       9   0x00000043
Next IFD: 0x00000000
Data of entry 1:
  0036  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  003c  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  0043  4d 61 6c 61 79 73 69 61 00                       Malaysia.

Move data buffer
IFD Offset: 0x00000001,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0x00000036
    2  0x0003  Ascii             (1)       7   0x0000003c
    3  0x0004  Ascii             (1)       9   0x00000043
Next IFD: 0x00000000
Data of entry 1:
  0037  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  003d  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  0044  54 48 52 45 45 00 00 00 00                       THREE....
IFD Offset: 0x00000001,   IFD Entries: 4
Entry     Tag  Format   (Bytes each)  Number  Offset
-----  ------  ---------------------  ------  -----------
    0  0x0001  Ascii             (1)       4  54 68 65 00 
    1  0x0002  Ascii             (1)       6   0x00000036
    2  0x0003  Ascii             (1)       7   0x0000003c
    3  0x0004  Ascii             (1)       9   0x00000043
Next IFD: 0x00000000
Data of entry 1:
  0037  4b 75 61 6c 61 00                                Kuala.
Data of entry 2:
  003d  4c 75 6d 70 75 72 00                             Lumpur.
Data of entry 3:
  0044  54 48 52 45 45 00 00 00 00                       THREE....
