NVMain详解

news/2025/3/19 14:43:41/

本节主要探讨NVMDataBlock这个模块

NVMDataBlock.h文件

#ifndef __NVMDATABLOCK_H__
#define __NVMDATABLOCK_H__#include <vector>
#include <stdint.h>
#include <ostream>namespace NVM {class NVMDataBlock
{public:NVMDataBlock( );~NVMDataBlock( );void SetSize( uint64_t s );uint64_t GetSize( );uint8_t GetByte( uint64_t byte );void SetByte( uint64_t byte, uint8_t value );void SetValid( bool valid );bool IsValid( );void Print( std::ostream& out ) const;NVMDataBlock& operator=( const NVMDataBlock& m );uint8_t *rawData;private:bool isValid;uint64_t size;NVMDataBlock( const NVMDataBlock& ) { }
};};std::ostream& operator<<( std::ostream& out, const NVM::NVMDataBlock& obj );#endif

首先是构造函数和结构函数

NVMDataBlock( );
~NVMDataBlock( );
NVMDataBlock::NVMDataBlock( )
{rawData = NULL;isValid = false;size = 0;
}
设置rawdata为空,无效,size为0NVMDataBlock::~NVMDataBlock( )
{delete[] rawData;rawData = NULL;
}
//delete [] 表示逐个使用对象的析构函数

接下来是对size的操作

void SetSize( uint64_t s );
uint64_t GetSize( );
void NVMDataBlock::SetSize( uint64_t s )
{assert( rawData == NULL );rawData = new uint8_t[s];size = s;isValid = true;
}// SetSize若 rawdata不为空,则不能setsize
// 传入的s是有多少位,rawdata是一个指向uint8_t ,有s个的指针uint64_t NVMDataBlock::GetSize( )
{return size;
}

接下来是对Byte的操作

uint8_t NVMDataBlock::GetByte( uint64_t byte )
{uint8_t rv = 0;if( isValid && byte <= size ){rv = *((uint8_t*)(rawData)+byte);}return rv;
}
//将某个特定byte取出来,输入参数为第几个byte//设置某个byte的值void NVMDataBlock::SetByte( uint64_t byte, uint8_t value )
{if( byte <= size ){rawData[byte] = value;}else{assert( false );}
}

无需解释了的valid值设置

void NVMDataBlock::SetValid( bool valid )
{isValid = valid;
}bool NVMDataBlock::IsValid( )
{return isValid;
}

关于打印的一系列函数

void NVMDataBlock::Print( std::ostream& out ) const
{out << std::hex;for( uint64_t i = 0; i < size; i++ ){out << std::setw(2) << std::setfill('0') << (int)rawData[i];}out << std::dec;
}std::ostream& operator<<( std::ostream& out, const NVMDataBlock& obj )
{obj.Print( out );return out;
}//先看重载的<<,调用打印并同时返回输出流
//

重载了 = 运算符

若 = 右值没有set过,则不做rawData的操作返回
若有,初始化rawData(此时rawData可能有值,不过都赋值成m的就好了)


NVMDataBlock& NVMDataBlock::operator=( const NVMDataBlock& m )
{if( m.rawData ){if( rawData == NULL )rawData = new uint8_t[m.size];memcpy(rawData, m.rawData, m.size);}isValid = m.isValid;size = m.size;return *this;
}

http://www.ppmy.cn/news/631545.html

相关文章

nvm 使用

1环境 Windows11 家庭版 安装nvm 卸载原有nodejs版本 如不卸载原有版本&#xff0c;会造成冲突&#xff0c;安装完nvm发现不了已安装的nodejs版本&#xff0c;建议卸载之前的版本。 2.下载nvmnvm nvm-setup&#xff0c;推荐下载zip版本nvm-setup.zip。 下载完解压&#xff…

nvm的简介,安装,使用?

什么是nvm&#xff1f; node 版本管理器&#xff0c;也就是说&#xff1a;一个 nvm 可以管理多个 node 版本&#xff08;包含 npm 与 npx&#xff09;&#xff0c;可以方便快捷的 安装、切换 不同版本的 node。 安装nvm 进入官网 [下载地址] https://github.com/coreybutler…

NVM下载及使用

一、nvm介绍 在工作中&#xff0c;我们可能同时在进行2个或者多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版本的NodeJS运行环境&#xff0c;这种情况下&#xff0c;对于维护多个版本的node将会是一件非常麻烦的事情&#xff0c;nv…

nvm的使用教程

1.nvm 说明 nvm 主要是用来管理 nodejs 和 npm 版本的工具&#xff0c;可以用来切换不同版本的 nodejs。 2.nvm 安装 使用前先删除掉本机已安装过的 nodejs&#xff08;如果已安装的 nodejs 的话&#xff09; 3.nvm下载地址 https://github.com/coreybutler/nvm-windows/r…

什么是nvm,nvm详解

nvm 1. 概念 详情点击 nvm全名node.js version management&#xff0c;是一个node的版本管理工具首先最重要的是&#xff1a;一定要卸载已安装的 NodeJS&#xff0c;否则会发生冲突。然后下载 nvm-windows 最新安装包&#xff0c;直接安装即可。nnvm 是 Mac 下的 node 管理工…

linux安装nvm

linux安装nvm 一、方法1二、方法2(CentOS7下安装nvm) 一、方法1 1、进入指定目录&#xff0c;下载nvm包 链接: https://github.com/nvm-sh/nvm/archive/refs/tags/v0.38.0.tar.gz //进入服务器指定目录 cd ..///下载nvm包 wget https://github.com/nvm-sh/nvm/archive/refs/…

Navcat的使用

1.连接数据库 选择需要连接的数据库。 然后输入以下内容&#xff1a; 【连接名】&#xff1a;自己任意取。 【主机】&#xff1a;若连接的是本地的数据库&#xff0c;就是默认的localhost&#xff0c;或者127.0.0.1&#xff1b;若连接的是服务器的数据库&#xff0c;输入服务…

NavMesh基础使用

第一步&#xff0c;先选择 Window-AI-Navigation,打开Navigation界面 第二步&#xff0c;选中需要设定为寻路状态的地形和上面的物体(选父节点没用&#xff0c;要选到对应的gameobject) 第三步&#xff0c;把需要烘焙的地形和物体&#xff0c;勾上NavigationStatic 第四步&…