Ejemplo n.º 1
0
        public static readonly long PageSize = (1024 * 1024) + (2048 * 1) + (512 * 2) + (512 * 4) + (512 * 4) + (512 * 8) + (128 * 512 * 1);               // = ByteDataSize + IntDataSize + FloatDataSize + DoubleDataSize + StringDataSize

        /// <summary>
        /// 메모리 맵 베이스의 생성자 입니다.
        /// </summary>
        /// <param name="fileName">메모리맵 파일 이름. 기존에 같은 이름의 파일이 존재하지 않으면 만들고, 있으면 파일을 엽니다.</param>
        /// <param name="pageIndex">메모리 블럭 인덱스. 메모리 블럭의 인덱스 입니다. 인덱스가 메모리 블럭 보다 커지면 익셉션을 발생시킵니다.</param>
        /// <param name="pageCount">메모리 블럭 개수. 메모리 블럭 개수를 참고하여 메모리 맵 파일을 생성합니다. 메모리 블럭은 0보다 커야합니다.</param>
        protected MMVisionData_PageBase(MemoryMappedFile memMap, uint pageIndex, uint pageCount)
        {
            // 메모리 맵 파일을 엽니다.
            _memMap = memMap;

            // 메모리 시작 위치를 구합니다. (byte)
            long startPos;

            if (pageIndex >= pageCount)
            {
                throw new IndexOutOfRangeException();
            }
            else
            {
                startPos = PageSize * pageIndex;
            }
            // 메모리 맵 뷰 클래스를 생성합니다.
            _byteData   = new MMData_ByteData(_memMap, startPos, ByteDataSize, MemoryMappedFileAccess.ReadWrite);
            startPos   += ByteDataSize;
            _boolData   = new MMData_BoolData(_memMap, startPos, BoolDataSize, MemoryMappedFileAccess.ReadWrite);
            startPos   += BoolDataSize;
            _shortData  = new MMData_ShortData(_memMap, startPos, ShortDataSize, MemoryMappedFileAccess.ReadWrite);
            startPos   += ShortDataSize;
            _intData    = new MMData_IntData(_memMap, startPos, IntDataSize, MemoryMappedFileAccess.ReadWrite);
            startPos   += IntDataSize;
            _floatData  = new MMData_FloatData(_memMap, startPos, FloatDataSize, MemoryMappedFileAccess.ReadWrite);
            startPos   += FloatDataSize;
            _doubleData = new MMData_DoubleData(_memMap, startPos, DoubleDataSize, MemoryMappedFileAccess.ReadWrite);
            startPos   += DoubleDataSize;
            _stringData = new MMData_StringData(_memMap, startPos, StringDataSize, MemoryMappedFileAccess.ReadWrite);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 입력한 데이터를 복사합니다.
        /// </summary>
        /// <param name="sourceData">복사 할 데이터</param>
        public void Copy(MMData_BoolData sourceData)
        {
            var copySourceData = sourceData.ToBytes();

            _memView.WriteArray(0, copySourceData, 0, (int)_mapSize);
        }