RangeInt,开源一个有限范围计数器模块。c语言的。 可以用于单片机

发布于:2024-11-27 ⋅ 阅读:(164) ⋅ 点赞:(0)

开源一个有限范围计数器模块。c语言的。 可以用于单片机
这个类的用途是 实现一个小范围(比如从0~314,或者-100到+100)的整数,可以智能++ --操作。 超过范围可以不再增长(可以理解为上饱和,或者下饱和)或者回到另外一头。(由变量bool autoZero决定)

使用本模块,可以闭着眼睛加加减减,数据绝对不会超出上限和下限。
如果要获得当前数值,只要读取value变量就可以了。
使用前,要用构造函数RangeInt_construct() 设置一下struct RangeInt

void	RangeInt_construct	(struct RangeInt* this,bool autoZero,int vmax,int vmin);  
构造函数,运行的时候包括Vmax本数,
数值范围在     vmin<=x<=Vmax
this是对象指针
bool autoZero 	==true,表示加加减减的时候,超过范围回到另外一头。
				==false表示超过范围可以不再增长(可以理解为上饱和,或者下饱和)

本模块没有动态申请内存,所以没有析构函数
注意,本程序是用于c语言,不是c++哦

#ifndef 	_RangeInt_H					
#define 	_RangeInt_H					
	//-----------------------------------------------------					
	/*					
		这个类的用途是		实现一个小范围的整数,可以智能++  --操作。		
		模块建立于	2021/2/25 16:59			
	*/					
	#include "project_config.h"					
	//#include ".h"					
	//#include ".h"					
	//-----------------------------------------------------					
	//using namespace std;					
	//#include <string>					
	//#include <vector>					
						
	//-----------------------------------------------------
	typedef struct RangeInt
	{
			int value; //需要加减的那个数值
			bool autoZero; //==true,加减到头后,value就跳到另外一头。==false,加减到头后,数值不再增长或者下降(可以理解为上饱和,或者下饱和)
			int mmax;  //这个数值的上限
			int mmin;  //这个数值的下限		
	}RangeInt;  //本模块所有功能都基于这个数据结构
	//-----------------------------------------------------					
	void	RangeInt_construct	(struct RangeInt* this,bool autoZero,int vmax,int vmin);  //构造函数,运行的时候包括Vmax本数
	//void	RangeInt_set				(struct RangeInt* this,bool autoZero,int vmax,int vmin);
	void	RangeInt_set_zero(struct RangeInt* this);
	void	RangeInt_set_min(struct RangeInt* this);
	void	RangeInt_inc(struct RangeInt* this); //加一
	void	RangeInt_dec(struct RangeInt* this); //减一
	void 	RangeInt_get_value_as_String(struct RangeInt* this,char* str); //以字符串方式返回当前数值
	void	RangeInt_setValue(struct RangeInt* this,int Value);
	void	RangeInt_incN(struct RangeInt* this,int n); //一次增加N
	void	RangeInt_decN(struct RangeInt* this,int n);//一次减小N	
	void	RangeInt_toMax(struct RangeInt* this); 
	void	RangeInt_toMin(struct RangeInt* this);
	void	RangeInt_setPercentage(struct RangeInt* this,float percentage);  //设置value为当前区间的百分比

	//-----------------------------------------------------					
	//-----------------------------------------------------					
	//-----------------------------------------------------					
//	class	RangeInt				
//	{					
//		public:	
//			int value;
//			RangeInt	();		//构造函数
//			RangeInt	(bool autoZero,int vmax,int vmin=0)	;	//构造函数 autoZero表示数字到了最大值是归零还是保持最大值
//			RangeInt	(int vmax,int vmin=0)	;	
//			~RangeInt	();		//析构函数
//			void	set(bool autoZero,int vmax,int vmin);
//			void	set_zero();
//			RangeInt operator++ ();
//			RangeInt operator-- ();
//			void inc	();		
//			void dec	();
//			std::string get_value_as_stdString();
//						
//		private:				
//			bool autoZero;
//			int mmax;
//			int mmin;
//			void init	(int a,int b);		
//	};					
	//-----------------------------------------------------					
#endif						

以下是他的主代码

//-----------------------------------------------------						
/*						
	该模块著作权:	
	模块建立于	2021/2/25 16:59				
*/						
//-----------------------------------------------------
#include		"RangeInt.h"
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						
		void	RangeInt__init(struct RangeInt* this,int a,int b)					
		{
			this->value=0;
			this->mmin=b;
			this->mmax=a;
			this->autoZero=false;
		}						
//-----------------------------------------------------						
void	RangeInt_construct	(struct RangeInt* this,bool autoZero,int vmax,int vmin)				
{						
	RangeInt__init(this,vmax,vmin);					
	this->autoZero=autoZero;
}						
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						
void	RangeInt_setValue(struct RangeInt* this,int Value)					
{
	int a=max(Value,this->mmin);
	a=min(a,this->mmax);
	this->value=a;
}						
//-----------------------------------------------------						
//void	RangeInt_set(struct RangeInt* this,bool autoZero,int vmax,int vmin)					
//{
//	this->value=vmin;
//	this->mmin=vmin;
//	this->mmax=vmax;
//	this->autoZero=autoZero;
//}						
//-----------------------------------------------------						
void	RangeInt_set_zero(struct RangeInt* this)					
{
	this->value=0;
}						
void	RangeInt_set_min(struct RangeInt* this)					
{
	this->value=this->mmin;
}						
//-----------------------------------------------------
void	RangeInt_inc(struct RangeInt* this)
{
	if(this->value<this->mmax)
		this->value++;
	else
	{
		if(this->autoZero)
		{
			this->value=this->mmin;
		}
		else
		{
			this->value=this->mmax;
		}
	}
}
//-----------------------------------------------------						
void	RangeInt_dec(struct RangeInt* this)
{
	if(this->value>this->mmin)
		this->value--;
	else
	{
		if(this->autoZero)
		{
			this->value=this->mmax;
		}
		else
		{
			this->value=this->mmin;
		}
	}
}
//-----------------------------------------------------						
//-----------------------------------------------------						
void RangeInt_get_value_as_String(struct RangeInt* this,char* str)
{
	int_2_String(str,this->value);
}
//-----------------------------------------------------
void	RangeInt_incN(struct RangeInt* this,int n)
{
	int a=this->value;
	a+=n;
	RangeInt_setValue(this,a);
}
//-----------------------------------------------------						
void	RangeInt_decN(struct RangeInt* this,int n)
{
	int a=this->value;
	a-=n;
	RangeInt_setValue(this,a);	
}
//-----------------------------------------------------
void	RangeInt_toMax(struct RangeInt* this)
{
	RangeInt_setValue(this,this->mmax);
}
//-----------------------------------------------------						
void	RangeInt_toMin(struct RangeInt* this)
{
	RangeInt_setValue(this,this->mmin);
}
//-----------------------------------------------------						
void	RangeInt_setPercentage(struct RangeInt* this,float percentage)
{
	float fm=this->mmax;
	float ps=percentage*fm;
	int a=(int)(ps+0.5f);
	RangeInt_setValue(this,a);
}
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						


网站公告

今日签到

点亮在社区的每一天
去签到