📄 cms_up.cc
字号:
/********************************************************************* Description: cms_up.cc* Provides the interface to CMS used by NML update functions* including a CMS update function for all the basic C data types.** Derived from a work by Fred Proctor & Will Shackleford** Author:* License: LGPL Version 2* System: Linux* * Copyright (c) 2004 All rights reserved.** Last change: * $Revision: 1.5 $* $Author: paul_c $* $Date: 2005/05/23 16:34:12 $********************************************************************/#include "cms.hh" /* class CMS */#include "cms_up.hh" /* class CMS_UPDATER */#include "rcs_print.hh" /* rcs_print_error() */#ifdef __cplusplusextern "C" {#endif#include <stdlib.h> // malloc(), free()#include <string.h> // memset()#ifdef __cplusplus}#endifCMS_UPDATER::CMS_UPDATER(CMS * _cms_parent, int create_encoded_data, long _neutral_size_factor): /********************************************** * Aliases to variables in the CMS parent * using aliases lets CMS and its CMS_UPDATER share this information * more conveniently and allowed the CMS_UPDATER functions to be pulled out * of CMS with fewer changes. (WPS - 6/12/95) *********************************************/encoded_data(_cms_parent->encoded_data),encoded_header(_cms_parent->encoded_header),encoded_queuing_header(_cms_parent->encoded_queuing_header),status(_cms_parent->status),size(_cms_parent->size),encoded_header_size(_cms_parent->encoded_header_size),encoded_queuing_header_size(_cms_parent->encoded_queuing_header_size),using_external_encoded_data(_cms_parent->using_external_encoded_data),pointer_check_disabled(_cms_parent->pointer_check_disabled),encoded_data_size(_cms_parent->encoded_data_size){ cms_parent = _cms_parent; mode = CMS_NO_UPDATE; neutral_size_factor = _neutral_size_factor; if (encoded_data == NULL && create_encoded_data) { if (cms_parent->enc_max_size > 0 && cms_parent->enc_max_size < neutral_size_factor * size) { set_encoded_data(malloc(cms_parent->enc_max_size), cms_parent->enc_max_size); } else { set_encoded_data(malloc(neutral_size_factor * size), neutral_size_factor * size); } using_external_encoded_data = 0; }}CMS_UPDATER::~CMS_UPDATER(){}void CMS_UPDATER::rewind(){}int CMS_UPDATER::set_mode(CMS_UPDATER_MODE _mode){ mode = _mode; switch (mode) { case CMS_NO_UPDATE: break; case CMS_ENCODE_DATA: encoding = 1; break; case CMS_DECODE_DATA: encoding = 0; break; case CMS_ENCODE_HEADER: encoding = 1; break; case CMS_DECODE_HEADER: encoding = 0; break; case CMS_ENCODE_QUEUING_HEADER: encoding = 1; break; case CMS_DECODE_QUEUING_HEADER: encoding = 0; break; default: rcs_print_error("CMS updater in invalid mode.\n"); return (-1); } return (0);}CMS_UPDATER_MODE CMS_UPDATER::get_mode(){ return mode;}int CMS_UPDATER::check_pointer(char *_pointer, long _bytes){ if (NULL == cms_parent) { return (-1); } return (cms_parent->check_pointer(_pointer, _bytes));}void CMS_UPDATER::set_encoded_data(void *_encoded_data, long _encoded_data_size){ if (NULL != encoded_data && !using_external_encoded_data && encoded_data != _encoded_data) { free(encoded_data); encoded_data = NULL; } encoded_data = _encoded_data; encoded_data_size = _encoded_data_size; using_external_encoded_data = 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -