def add(self, item, count=1):
        '''
        When we receive stream of data, we add them in the chunk
        which has limit on the no. of items that it will store.
        >>> s = StreamCounter(5,5)
        >>> data_stream = ['a','b','c','d']
        >>> for item in data_stream:
        ...     s.add(item)
        >>> s.chunk_size
        5
        >>> s.n_items_seen
        4
        >>> s.n_chunk_items_seen
        4
        >>> s.n_chunks
        0
        >>> from pprint import pprint
        >>> pprint(s.chunked_counts.get(s.n_chunks, {}))
        {'a': 1, 'b': 1, 'c': 1, 'd': 1}
        >>> s.counts_total
        4
        >>> data_stream = ['a','b','c','d','e','f','g','e']
        >>> for item in data_stream:
        ...     s.add(item)
        >>> s.chunk_size
        5
        >>> s.n_items_seen
        12
        >>> s.n_chunk_items_seen
        2
        >>> s.n_chunks
        2
        >>> s.chunked_counts.get(s.n_chunks, {})
        {'g': 1, 'e': 1}
        '''
        self.n_items_seen += count
        self.n_chunk_items_seen += count

        # get current chunk
        chunk_id = self.n_chunks
        chunk = self.chunked_counts.get(chunk_id, {})
        self.chunked_counts[chunk_id] = chunk

        # update count in the current chunk counter dict
        if item in chunk:
            chunk[item] += count
        else:
            self.n_counts += 1
            chunk[item] = count

        # is the current chunk done?
        if self.n_chunk_items_seen >= self.chunk_size:
            self.n_chunks += 1
            self.n_chunk_items_seen = 0

        # In case we reached max capacity in count entries,
        # drop oldest chunks until we come back within limit
        while self.n_counts >= self.max_counts:
            self._drop_oldest_chunk()