Files
MicrochipFor32/STL_Device/STL_Queue.cpp

197 lines
6.0 KiB
C++
Raw Normal View History

/*----------------------------------------------------------------------------------------------------
#
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
#
# <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ṩ,<2C><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʾ
# <09><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B3A5><EFBFBD><EFBFBD>
#
# ʹ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
# 1. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ,<2C><EFBFBD><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>.
# 2. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Ŀ<EFBFBD><C4BF><><C7B0><EFBFBD>ǰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>.
# <09><><EFBFBD>Ұ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>.
# 3. <09><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>,<2C>޸<EFBFBD>,<2C>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>۱<EFBFBD><DBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
# 4. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CAB9>,<2C><>Ʒ<EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ĵ<CDB5><C4B5><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD>.
# 5. <09><>֪ͨ<CDA8><D6AA><EFBFBD>ô<EFBFBD><C3B4>κ<EFBFBD><CEBA><EFBFBD>Դɾ<D4B4><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
#
# Yuankang Liang(XerolySkinner)
# E-mail:zabbcccbbaz@163.com
# QQ:2715099320
# Mobile Phone:13005636215
#
# All rights reserved.
*/
/**
* @file STL_Queue.cpp
* @brief ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>STL<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Queue
* @mainpage <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>Ϣ
* @author Yuankang Liang(XerolySkinner)
* @email zabbcccbbaz@163.com
* @version V1.0.0
* @date 2022-11-09 01:03
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// ͷ<>ļ<EFBFBD>
#include "STL_Queue.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// <09><><EFBFBD><EFBFBD><ECBAAF>
STL_rQueue::STL_rQueue(void) {
room = 0;
size = 0;
dat = NULL;}
//----------------------------------------------------------------------------------------------------
STL_rQueue::~STL_rQueue(void) {
free(dat);}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// <09><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
/**
* @brief ѹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
* @param var <EFBFBD><EFBFBD>Ҫѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u8 STL_rQueue::push(u8 var) {
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
u8* temp_stacks = dat;
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>пռ<D0BF>
if (size >= room) {
// <09><><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><C2B3><EFBFBD>
dat = static_cast<u8*>(realloc(dat, ++size));
// <09><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7>ش<EFBFBD><D8B4><EFBFBD>
if (dat == NULL) {
--size; // <09>ָ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
dat = temp_stacks; // <09>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
return QUEUES_REAL_ERROR;} // <09><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
room = size;
// <09><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dat[size - 1] = var;
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷָ<C8B7><D6B8>
return QUEUES_OK;}
// <09>ռ<EFBFBD>ʣ<EFBFBD><CAA3><><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dat[(++size) - 1] = var;
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷָ<C8B7><D6B8>
return QUEUES_OK;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u8 STL_rQueue::pop(void) {
// <09><><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>1,<2C><><EFBFBD>̳<EFBFBD>Ա<EFBFBD>ռ<EFBFBD>
if (size > 1) {
// <09><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>һλ
for (u32 i = 0; i < size - 1; i++)
*(dat + i) = *(dat + i + 1);
--size; // <09><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ռ<EFBFBD>
return QUEUES_OK;}
// <09><><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>1,<2C><>ָ<EFBFBD><D6B8>ͷ
else if (size == 1) {
size = 0; // <09><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ռ<EFBFBD>
return QUEUES_OK;} // <09><><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>Ϊ<EFBFBD><CEAA>,<2C><><EFBFBD>ؿն<D8BF><D5B6>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
else
return QUEUES_EMPTY;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @param &var <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u8 STL_rQueue::top(u8& var) {
if (size) {
var = dat[0];
return QUEUES_OK;}
return QUEUES_EMPTY;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,Ϊu8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>u32<EFBFBD><EFBFBD>ռ4<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
*/
u32 STL_rQueue::The_size(void) {
return size;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>,u8<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u32 STL_rQueue::The_room(void) {
return room;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀռ<EFBFBD><EFBFBD>ȶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>,<EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u8 STL_rQueue::clean(void) {
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
u8* temp_stacks = dat;
// <09><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>Ա,<2C><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ռ<EFBFBD>
if (size) {
// <09><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ռ<EFBFBD>
dat = static_cast<u8*>(realloc(dat, size));
// <09><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C>ƺ󲢷<C6BA><F3B2A2B7>ش<EFBFBD><D8B4><EFBFBD>
if (dat == NULL) {
--size; // <09>ָ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
dat = temp_stacks; // <09>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
return QUEUES_REAL_ERROR;} // <09><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
}
// <09>޳<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ա
else {
free(dat); // <09>ͷ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ռ<EFBFBD>
dat = NULL;
size = 0;} // <09><>ָ<EFBFBD><D6B8><EFBFBD>ײ<EFBFBD>
// <09><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ؿն<D8BF><D5B6><EFBFBD>
room = size; // <09>µĿռ<C4BF><D5BC><EFBFBD>С
return QUEUES_OK;}
//----------------------------------------------------------------------------------------------------
/**
* @brief ѹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD>Ա
* @param var <EFBFBD><EFBFBD>Ҫѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u8 STL_rQueue::push32(u32 var) {
push(((u8*)(&var))[3]);
push(((u8*)(&var))[2]);
push(((u8*)(&var))[1]);
push(((u8*)(&var))[0]);
return QUEUES_OK;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Աֵ
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u8 STL_rQueue::poptop(void) {
u8 var = 0;
top(var); pop();
return var;}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD>Ա
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Աֵ
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
u32 STL_rQueue::poptop32(void) {
u8 dat[4] = { 0,0,0,0 };
top(dat[3]); pop();
top(dat[2]); pop();
top(dat[1]); pop();
top(dat[0]); pop();
return *((u32*)(dat));}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>void(*)void<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void(*STL_rQueue::poptopfun(void))(void) {
return (void(*)(void))poptop32();}
//----------------------------------------------------------------------------------------------------
/**
* @brief ѹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>void(*)void<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void STL_rQueue::pushfun(void(*fun)(void)) {
push32((u32)fun);}
//////////////////////////////////////////////////////////////////////////////////////////////////////