/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.logic.compiler.tokens;
import java.util.Map;
import java.util.Set;
import com.hundsun.ares.studio.atom.compiler.constant.IAtomEngineContextConstant;
import com.hundsun.ares.studio.engin.skeleton.ISkeletonAttributeHelper;
import com.hundsun.ares.studio.engin.token.ICodeToken;
import com.hundsun.ares.studio.logic.compiler.constant.ILogicEngineContextConstant;
/**
* @author liaogc
*
*/
public class LogicServiceObjectReleseToken implements ICodeToken {
private final static String OBJ_RELEASE = "if (%1$s)\r\n"
+"{\r\n"
+"%1$s->Release();\r\n"
+"}\r\n";
private final static String OBJ_OUT_RELEASE = "if (%1$s)\r\n"
+"{\r\n"
+"free(%1$s->GetPackBuf());\r\n"
+"%1$s->Release();\r\n"
+"}\r\n";
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.token.ICodeToken#getContent()
*/
@Override
public String getContent() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.token.ICodeToken#getType()
*/
@Override
public int getType() {
return CODE_TEXT;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.engin.token.ICodeToken#genCode(java.util.Map)
*/
@Override
public String genCode(Map<Object, Object> context) throws Exception {
StringBuffer code = new StringBuffer();
code.append(freeObject(context));
return code.toString();
}
//���������ͷ�
private String freeObject(Map<Object, Object> context){
StringBuffer obj_release_buffer = new StringBuffer();
ISkeletonAttributeHelper helper = (ISkeletonAttributeHelper)context.get(ILogicEngineContextConstant.SKELETON_ATTRIBUTE_HELPER);
Set<String> initObjectList = helper.getAttribute(IAtomEngineContextConstant.ATTR_IN_OBJECT_INIT_VARIABLE_LIST);
Set<String> noInitObjectList = helper.getAttribute(IAtomEngineContextConstant.ATTR_IN_OBJECT_NOINIT_VARIABLE_LIST);
Set<String> outObjectList = helper.getAttribute(IAtomEngineContextConstant.ATTR_OUT_OBJECT_INIT_VARIABLE_LIST);
//��������ͷ�
for(String objectSet:noInitObjectList){
obj_release_buffer.append(String.format(OBJ_RELEASE,"v_"+objectSet+"ResultSet"));
}
for(String objectSet:initObjectList){
if(noInitObjectList.add(objectSet)){
obj_release_buffer.append(String.format(OBJ_RELEASE,"v_"+objectSet+"ResultSet"));
}
}
//��������ͷ�
for(String objectSet:outObjectList){
obj_release_buffer.append(String.format(OBJ_OUT_RELEASE,"v_"+objectSet+"ResultSet"));
}
return obj_release_buffer.toString();
}
}