yarpconfigfile.cpp

来自「一个语言识别引擎」· C++ 代码 · 共 272 行

CPP
272
字号
// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-

/*
 * Copyright (C) 2006 Paul Fitzpatrick, Giorgio Metta
 * CopyPolicy: Released under the terms of the GNU GPL v2.0.
 *
 */

///
///  $Id: YARPConfigFile.cpp,v 1.3 2006/10/24 16:43:50 eshuy Exp $
///
///


//
// YARPIniFile.cpp

#include <yarp/YARPConfigFile.h>

//
// gestione del path di default.
//
using namespace std;

bool YARPConfigFile::_open(const YARPString &path, const YARPString &filename)
{
	YARPString tmp = path;
	tmp.append(filename);
	_pFile = ACE_OS::fopen(tmp.c_str(), "r");
	if (_pFile != NULL)
        {
            _openFlag = true;
            return true;
        }
	else 
		return false;
}

int YARPConfigFile::get(const char *section, const char *name, double *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	while ( (i<n) && (fscanf(_pFile, "%lf", out++) != EOF) )
		i++;
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::get(const char *section, const char *name, short *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	while ( (i<n) && (fscanf(_pFile, "%hd", out++) != EOF) )
		i++;
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::get(const char *section, const char *name, char *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	while ( (i<n) && (fscanf(_pFile, "%c", out++) != EOF) )
		i++;
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::getHex(const char *section, const char *name, char *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	int tmp;
	while ( (i<n) && (fscanf(_pFile, "%x", &tmp) != EOF) )
        {
            *out = (char) tmp;
            out++;
            i++;
        }
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::getHex(const char *section, const char *name, short *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	int tmp;
	while ( (i<n) && (fscanf(_pFile, "%x", &tmp) != EOF) )
        {
            *out = (short) tmp;
            i++;
            out++;
        }
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::get(const char *section, const char *name, int *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	while ( (i<n) && (fscanf(_pFile, "%d", out++) != EOF) )
		i++;
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::get(const char *section, const char *name, unsigned int *out, int n)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	while ( (i<n) && (fscanf(_pFile, "%u", out++) != EOF) )
		i++;
			
	_close();
	
	if (i == n)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;	
}

int YARPConfigFile::get(const char *section, const char *name, double **matrix, int n, int m)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	// we assume the matrix is implemented as a C bidimensional vector
	double *out = matrix[0];

	int i = 0;
	while ( (i<n*m) && (fscanf(_pFile, "%lf", out++) != EOF) )
		i++;
			
	_close();
	
	if (i == n*m)
		return YARP_OK;		// found all the values
	else	
		return YARP_FAIL;		
}

int YARPConfigFile::getString(const char *section, const char *name, char *out)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	i = fscanf(_pFile, "%s", out);
					
	_close();
	
	if (i > 0)
		return YARP_OK;		// found at least a single char
	else 
		return YARP_FAIL;
}

int YARPConfigFile::getString(const char *section, const char *name, YARPString &out)
{
	if (_get(section, name) == YARP_FAIL)
		return YARP_FAIL;

	int i = 0;
	char tmp[255];
	i = fscanf(_pFile, "%s", tmp);
	out = YARPString(tmp);
					
	_close();
	
	if (i > 0)
		return YARP_OK;		// found at least a single char
	else 
		return YARP_FAIL;
}

int YARPConfigFile::_get(const char *section, const char *name)
{
	if (!_open(_path.c_str(), _filename.c_str()))
		return YARP_FAIL;

	if (!_findSection(section))
        {
            _close();
            return YARP_FAIL;
        }

	if (_findString(name))
		return YARP_OK;
	
	_close();
	return YARP_FAIL;
}

bool YARPConfigFile::_findSection(const char *sec)
{
	char row[255];
	
	while (fscanf(_pFile, "%s", row) != EOF)
        {
            if (ACE_OS::strcmp(sec, row) == 0)
                return true;
        }

	return false;
}

bool YARPConfigFile::_findString(const char *str)
{
	char row[255];

	int l = ACE_OS::strlen(str);
	if (l == 0)
		return false;
	
	while (fscanf(_pFile, "%s", row) != EOF)
        {
            if (row[0] == '[')
                return false;		//end of section
		
            if (ACE_OS::strcmp(row, str) == 0)
                return true;
        }

	return false;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?