rm.file의 소스 코드

from bluebase.pf import (
    PfNoNextAllocatedPageFoundError,
    PfLayoutField,
    PfLayoutView,
    PfPageHeader,
    PfPageId,
    PfPage,
    PfFileHeader,
    PfFile,
)
from .error import (
    RmInvalidPidError,
    RmNoNextPageFoundError,
)
from .record import (
    RmRecordKey,
    RmRecordData,
    RmRecord,
)
from .page import (
    RmPageId,
    RmPageHeader,
    RmPage,
)


__all__ = (
    'RmFileHeader',
    'RmFile',
)


[문서] class RmFileHeader(PfLayoutView): """ file의 header를 나타내는 클래스입니다. file header는 1번째 페이지에 저장됩니다. page content의 첫 8바이트를 사용하는 layout view입니다. layout view의 property를 사용 할 때는 항상 해당 page가 pin 되어있어야 합니다. Attributes: record_size (int): record의 크기. first_available_pid (RmPageId): file에 있는 가장 첫번째 available page의 ID. `NO_AVAILABLE_PAGE` 인 경우는 file에 available page가 없다는 뜻입니다. """ PID = PfPageId(int(PfFileHeader.PID) + 1) """ file header가 들어있는 page의 ID. """ NO_AVAILABLE_PAGE = RmPageId(-1) """ file에 available page가 없다는 뜻을 나타내는 상수. """ _fields = ( PfLayoutField('record_size', '<i'), PfLayoutField('first_available_pid', '<i'), ) @property def record_size(self) -> int: return int(self.get('record_size')) @record_size.setter def record_size(self, size: int) -> None: self.set('record_size', int(size)) @property def first_available_pid(self) -> RmPageId: return RmPageId(self.get('first_available_pid')) @first_available_pid.setter def first_available_pid(self, pid: RmPageId) -> None: self.set('first_available_pid', int(pid))
[문서] class RmFile: """ file을 나타내는 클래스입니다. Attributes: _pf_file (PfFile): PF component의 file. record_size (int): record의 크기. """
[문서] def __init__(self, pf_file: PfFile, record_size: int, ) -> None: """ file을 초기화합니다. Args: pf_file (PfFile): PF component의 file. record_size (int): record의 크기. """ self._pf_file = pf_file self.record_size = record_size
[문서] def get_page(self, pid: RmPageId) -> RmPage: """ TODO: 설명 Args: pid (RmPageId): 대상 page의 ID. Returns: RmPage: 가져온 page. Raises: RmInvalidPidError: `pid` 가 유효하지 않은 경우. """ raise NotImplementedError
[문서] def find_next_page(self, pid: RmPageId) -> RmPage: """ TODO: 설명 Args: pid (RmPageId): 대상 page의 ID. Returns: RmPage: `pid` 다음에 있는 page. Raises: RmNoNextPageFoundError: `pid` 다음에 있는 page를 찾을 수 없는 경우. """ raise NotImplementedError
[문서] def get_record(self, key: RmRecordKey) -> RmRecord: """ TODO: 설명 Args: key (RmRecordKey): 대상 record의 key. Returns: RmRecord: 가져온 record. Raises: RmInvalidSidError: `key.sid` 가 유효하지 않은 경우. RmUnoccupiedSlotError: `key.sid` 가 비어있는 경우. """ raise NotImplementedError
[문서] def insert_record(self, data: RmRecordData) -> RmRecordKey: """ TODO: 설명 Args: data (RmRecordData): 삽입할 record data. Returns: RmRecordKey: 생성된 record의 key. Raises: RmInvalidRecordDataSizeError: `data` 의 크기가 유효하지 않은 경우. """ raise NotImplementedError
[문서] def delete_record(self, key: RmRecordKey) -> None: """ TODO: 설명 Args: key (RmRecordKey): 대상 record의 key. Raises: RmInvalidSidError: `key.sid` 가 유효하지 않은 경우. RmUnoccupiedSlotError: `key.sid` 가 비어있는 경우. """ raise NotImplementedError
[문서] def update_record(self, key: RmRecordKey, data: RmRecordData) -> None: """ TODO: 설명 Args: key (RmRecordKey): 대상 record의 key. data (RmRecordData): 갱신할 record data. Raises: RmInvalidSidError: `key.sid` 가 유효하지 않은 경우. RmUnoccupiedSlotError: `key.sid` 가 비어있는 경우. RmInvalidRecordDataSizeError: `data` 의 크기가 유효하지 않은 경우. """ raise NotImplementedError