创建通用循环缓冲区

2024-01-08

鉴于希望从其内容中抽象出循环缓冲区的结构,并从以下代码段开始(由this http://en.wikipedia.org/wiki/Circular_buffer维基百科条目):

typedef struct
{ 
    int value;
} ElemType;

typedef struct
{
    int         size;      /* total number of elements */
    int         start;     /* index of oldest element */
    int         count;     /* index at which to write new element  */
    ElemType   *elements;  /* vector of elements */
} CircularBuffer;

void cbInit(CircularBuffer *cb, int size) {
    cb->size  = size;
    cb->start = 0;
    cb->count = 0;
    cb->elements = (ElemType *)calloc(cb->size, sizeof(ElemType));
}

如何抽象元素类型以便在定义 CircularBuffer 实例时指定它?到目前为止我的尝试如下:

CircularBuffer *cbInit(uint16 size, void *element)
{
    CircularBuffer *buffer;

    buffer = malloc(sizeof(*buffer));

    if (buffer != NULL)
    {
        buffer->size = size;
        buffer->start = 0;
        buffer->count = 0;
        buffer->elements = (void *)calloc(size, sizeof(???));

        if (buffer->elements == NULL)
        {
            free(buffer);
            buffer = NULL;
        }
    }

    return buffer;
}

但我不知道如何确定未知类型的大小,该类型可能是 int、struct 或介于两者之间的任何类型。我正在尝试做的事情可能吗?


正如您所发现的,您无法自动判断未知数据的大小。您将需要固定元素类型(void*将是一个很好的通用选择),或者让用户传递每个元素的大小:

CircularBuffer *cbInit(uint16 size, int elementSize)
{
    ...
    buffer->elementSize = elementSize;
    buffer->elements    = calloc(size, elementSize);  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建通用循环缓冲区 的相关文章

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil

随机推荐

  • pageshow/pagehide 事件未触发

    我碰到pageshow pagehide事件 但我不太确定它们是如何工作的 我将它们注册在document 以及稍后window反对 但他们从未开枪 我预计它们会在页面加载后触发pageshow 当我转到其他页面时pagehide 但这从未
  • 如何更改 Angular Material CdkDroplist 行为以模拟“自由”放置区?

    目标是创建一个全宽拖放区 我可以在其中放置 小部件 并在放置区周围自由拖动它们 但不同的是 我还可以删除列表小部件 其中我也可以删除其他小部件 所以我有这个堆栈闪电战 https stackblitz com edit angular fr
  • Android 版 Google plus:凭据无效

    我使用以下代码来获取访问令牌 在连接到 Google 后 获取个人资料信息和电子邮件 String sAccessToken GoogleAuthUtil getToken this mPlusClient getAccountName o
  • Web 表单脚手架而不是 MVC

    可以使用 Web 表单代码搭建脚手架吗 thanks ASP NET 动态数据 http www asp net dynamicdata是一个应该与 Web 表单和 MVC 一起使用的脚手架解决方案
  • C# 中浮点和双精度数据类型的实际范围是多少?

    我正在学习 C 并试图获得 C 中数据类型实际范围的逻辑视觉表示 我已经介绍了整数 现在介绍了浮点和双精度数据类型 8 位 1 字节 sbyte 128 到 127 8 位 1 字节 字节 0 到 255 16 位 2 字节 短 32 76
  • Safari 6 中未设置 Cookie

    晚上好 这个问题我已经问过几次了 没有得到答复 希望这次一切顺利 我使用 php 和 Facebook PHP SDK 开发 Facebook 应用程序已经有几年了 最近我一直在为 Safari 和 Facebook 的登录而烦恼 问题是
  • dc.js 带复选框的多选菜单

    我有一个数据集 其中包含 5 列 gt 国家 地区 ID 值和部门 我能够使用值和国家 地区在 dc js 中创建行图 其中国家 地区是我的维度 var rowChart dc rowChart rowChart d3 csv data c
  • g++ 错误:“malloc”未在此范围内声明

    我在 Fedora 下使用 g 编译 openGL 项目 其中包含以下行 textureImage GLubyte malloc sizeof GLubyte RESOURCE LENGTH 编译时 g 错误提示 error malloc
  • 修剪字符串中的最后一个字符

    我有一个字符串说 Hello world 我想做一个修剪或移除以取出 关世界但不关你好 Hello world TrimEnd 阅读更多 https msdn microsoft com en us library 64zz6w66 v v
  • JScrollPane 中的 JTable 具有可调整大小的 JFrame 固定大小?

    我有一个JTable里面的一个JScrollPane 我想让列在调整大小时保持固定 行保持相同的大小 并且有一个滚动条可以上下移动 但我无法让滚动条在垂直方向上以相同的方式工作 这是我的项目的图片 其中 Duke 的 y 轴完全正常 并且有
  • Haskell - Foldl 和 Foldr?

    之间的区别是foldl and foldr只是循环的方向 我认为他们所做的事情有所不同 而不仅仅是方向上的不同 如果您的函数不具有关联性 即 用括号括起表达式的方式很重要 则存在差异 例如 foldr 0 1 10 5 but foldl
  • java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest

    我正在通过多部分过滤器处理文件上传 如下所述here http balusc blogspot com 2007 11 multipartfilter html 我创建了一个 WAR 文件并部署在 Weblogic 10 3 3 服务器上并
  • window.location 与 just location

    在网络上 我看到大量 JavaScript 程序员在编写window location而不仅仅是location 我很好奇是否有人可以解释原因 window是全局对象 因此没有必要包含 不是吗 我的意思是 你看不到人们写window Mat
  • 允许 Firebase Analytics 域名而不允许其他 Google 服务

    我有一个应用程序 旨在在防火墙后面的内部网络内使用 需要为此应用程序启用 Firebase Analytics 并且网络管理员需要允许 Firebase 端点而不允许所有 Google 服务 到目前为止我才知道我需要允许 firebase
  • 我可以在调用纯虚函数时禁用异常吗?

    我有一些代码看起来像这样 class Writable public virtual void putc const char ch 0 protected virtual Writable class Readable public vi
  • 尝试添加强类型视图在 MVC 项目中找不到任何类

    我有一个非常奇怪的问题 每当我尝试在 ASP NET MVC2 中使用 添加视图 对话框 然后尝试通过从可用类的下拉列表中选择 视图数据类 来 创建强类型视图 时 没有任何类 模型 在我的 MVC 项目中出现了 非常奇怪的部分是我的 MVC
  • 如何在 KeyDown 中确定 Shift + Tab 被按下

    How can I determine in KeyDown that Tab was pressed private void DateTimePicker BirthDate KeyDown object sender KeyEvent
  • 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)有什么区别吗?

    我理解之间的区别char and varchar但我不确定的确切含义varchar最大长度 当我们存储string长度小于10的有什么区别varchar 10 and varchar 100 我认为这两种情况都使用相同的空间并具有相同的性能
  • 如何在 F# 中连接字符串列表?

    我现在正在尝试这个 但我还没有完全解决方法签名 有人吗 messages 是 seq string 的一个字段 let messageString List reduce messages fun m1 m2 gt m1 m2 Enviro
  • 创建通用循环缓冲区

    鉴于希望从其内容中抽象出循环缓冲区的结构 并从以下代码段开始 由this http en wikipedia org wiki Circular buffer维基百科条目 typedef struct int value ElemType