📄 recinterp.c
字号:
/*
========================================================================
DEVise Data Visualization Software
(c) Copyright 1992-1996
By the DEVise Development Group
Madison, Wisconsin
All Rights Reserved.
========================================================================
Under no circumstances is this software to be copied, distributed,
or altered in any way without prior permission from the DEVise
Development Group.
*/
/*
$Id: RecInterp.c,v 1.6 1996/05/07 16:37:14 jussi Exp $
$Log: RecInterp.c,v $
Revision 1.6 1996/05/07 16:37:14 jussi
Added _recPos variable and methods for it.
Revision 1.5 1996/01/19 20:03:17 jussi
Remove redundant Print().
Revision 1.4 1995/12/28 19:46:47 jussi
Small fixes to remove compiler warnings.
Revision 1.3 1995/12/14 17:53:12 jussi
Small fixes to get rid of g++ -Wall warnings.
Revision 1.2 1995/09/05 22:15:30 jussi
Added CVS header.
*/
#include <stdio.h>
#include <time.h>
#include "AttrList.h"
#include "RecInterp.h"
#include "Util.h"
RecInterp::RecInterp()
{
_attrs = NULL;
_buf = NULL;
_recPos = 0;
}
void RecInterp::SetBuf(void *buf)
{
_buf = buf;
}
void RecInterp::SetAttrs(AttrList *attrs)
{
_attrs = attrs;
}
char *RecInterp::GetString(char *attrName)
{
AttrInfo *info;
if (_attrs == NULL || _buf == NULL)
return NULL;
if ((info = _attrs->Find(attrName)) == NULL)
return NULL;
return ((char *)_buf) + info->offset;
}
double *RecInterp::GetFloat(char *attrName)
{
AttrInfo *info;
if (_attrs == NULL || _buf == NULL)
return NULL;
if ((info = _attrs->Find(attrName)) == NULL)
return NULL;
return (double *)(((char *)_buf) + info->offset);
}
int *RecInterp::GetInt(char *attrName)
{
AttrInfo *info;
if (_attrs == NULL || _buf == NULL)
return NULL;
if ((info = _attrs->Find(attrName)) == NULL)
return NULL;
return (int *)(((char *)_buf) + info->offset);
}
time_t *RecInterp::GetDate(char *attrName)
{
AttrInfo *info;
if (_attrs == NULL || _buf == NULL)
return NULL;
if ((info = _attrs->Find(attrName)) == NULL)
return NULL;
return (time_t *)(((char *)_buf) + info->offset);
}
AttrInfo *RecInterp::GetAttrInfo(char *attrName)
{
if (_attrs == NULL )
return NULL;
return _attrs->Find(attrName);
}
void RecInterp::PrintAttrHeading()
{
if (_attrs == NULL )
return;
int num = _attrs->NumAttrs();
for(int i = 0; i < num; i++) {
AttrInfo *info = _attrs->Get(i);
printf("%s: ", info->name);
}
}
void RecInterp::PrintAttr(char *buf, int attrNum, Boolean printAttrName)
{
if (_attrs == NULL || _buf == NULL) {
buf[0] = '\0';
return;
}
AttrInfo *info = _attrs->Get(attrNum);
int *intVal;
float *floatVal;
double *doubleVal;
char *strVal;
time_t *tm;
switch(info->type) {
case IntAttr:
intVal = (int *)(((char *)_buf) + info->offset);
if (printAttrName)
sprintf(buf, "%s: %d", info->name, *intVal);
else
sprintf(buf, "%d ", *intVal);
break;
case FloatAttr:
floatVal = (float *)(((char *)_buf) + info->offset);
if (printAttrName)
sprintf(buf, "%s: %.2f", info->name, *floatVal);
else
sprintf(buf, "%f", *floatVal);
break;
case DoubleAttr:
doubleVal = (double *)(((char *)_buf) + info->offset);
if (printAttrName)
sprintf(buf, "%s: %.2f", info->name, *doubleVal);
else
sprintf(buf, "%f", *doubleVal);
break;
case StringAttr:
strVal = ((char *)_buf) + info->offset;
if (printAttrName)
sprintf(buf, "%s: %s", info->name, strVal);
else
sprintf(buf, "%s", strVal);
break;
case DateAttr:
tm = (time_t *)(((char *)_buf) + info->offset);
if (printAttrName)
sprintf(buf, "%s: '%s'", info->name, DateString(*tm));
else
sprintf(buf, "'%s'", DateString(*tm));
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -