code: def add(self, size: int, obj: object) -> None:
      if self.started:
          raise RuntimeError("cannot add items after loading started")
      self.items.append((size, obj))
  
imports: import collections
  import dataclasses
  import io
  import os
  import pickle
  import queue
  import threading
  from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from pathlib import Path
  from typing import Callable, cast, Dict, IO, Iterable, Iterator, List, Optional, Tuple, Union
  import torch
  import torch.distributed
  from torch import Tensor
  from torch._utils import _get_device_module
  from torch.distributed._shard._utils import narrow_tensor_by_index
  from torch.distributed.checkpoint._checkpointer import _Checkpointer
  from torch.futures import Future
  from .metadata import Metadata, MetadataIndex
  from .planner import LoadItemType, LoadPlan, LoadPlanner, ReadItem, SavePlan, SavePlanner, WriteItem, WriteItemType
  from .storage import StorageReader, StorageWriter, WriteResult
  from .utils import _create_file_view
label_desc: Use image node_id 6 for calling the _OverlappingCpuLoader obj's underlying member method code with example usage: obj.add(size, obj) without return types