Memory management (ala java's hashmap, array)
Hejsa alle sammen, nu har jeg sat og rodet en del med java (i eclipse), og vil så over og legge lidt mere med c++, så løber jeg ind i et mindre problem.I java, for at gemme data i memory, og hente data baseret på en unik ID gjorde jeg sådan her, meget nemt.
--- JAVA ---
public class LevelUpData
{
private static Logger _log = Logger.getLogger(LevelUpData.class.getName());
private static LevelUpData _instance;
private HashMap _lvltable;
public static LevelUpData getInstance()
{
if (_instance == null)
{
_instance = new LevelUpData();
}
return _instance;
}
private LevelUpData()
{
_lvltable = new HashMap();
LineNumberReader lnr = null;
try
{
File spawnDataFile = new File("data/lvlupgain.csv");
lnr = new LineNumberReader(new BufferedReader( new FileReader(spawnDataFile)));
String line = null;
while ( (line=lnr.readLine()) != null)
{
if (line.trim().length() == 0 || line.startsWith("#"))
{
continue;
}
L2LvlupData lvlupData = parseList(line);
_lvltable.put(new Integer(lvlupData.getClassid()), lvlupData);
}
_log.config("created " + _lvltable.size() + " Lvl up data templates");
}
catch (FileNotFoundException e)
{
_log.warning("lvlupgain.csv is missing in data folder");
}
catch (Exception e)
{
_log.warning("error while creating npc data table "+e);
}
finally
{
try
{
lnr.close();
}
catch (Exception e1)
{
// ignored
}
}
}
private L2LvlupData parseList(String line)
{
StringTokenizer st = new StringTokenizer(line,";");
L2LvlupData lvlDat = new L2LvlupData();
lvlDat.setClassid(Integer.parseInt(st.nextToken()) );
lvlDat.setDefaulthp(Double.parseDouble(st.nextToken()) );
lvlDat.setDefaulthpadd(Double.parseDouble(st.nextToken()) );
lvlDat.setDefaulthpbonus(Double.parseDouble(st.nextToken()) );
lvlDat.setDefaultmp(Double.parseDouble(st.nextToken()) );
lvlDat.setDefaultmpadd(Double.parseDouble(st.nextToken()) );
lvlDat.setDefaultmpbonus(Double.parseDouble(st.nextToken()) );
return lvlDat;
}
/**
* @param template id
* @return
*/
public L2LvlupData getTemplate(int classId)
{
return (L2LvlupData) _lvltable.get(new Integer(classId));
}
}
----- getter og setter -----
public class L2LvlupData
{
private int _classid;
private double _defaulthp;
private double _defaulthpadd;
private double _defaulthpbonus;
private double _defaultmp;
private double _defaultmpadd;
private double _defaultmpbonus;
/**
* @return Returns the classid.
*/
public int getClassid() {
return _classid;
}
/**
* @return Returns the defaulthp.
*/
public double getDefaulthp() {
return _defaulthp;
}
/**
* @return Returns the defaulthpadd.
*/
public double getDefaulthpadd() {
return _defaulthpadd;
}
/**
* @return Returns the defaulthpbonus.
*/
public double getDefaulthpbonus() {
return _defaulthpbonus;
}
/**
* @return Returns the defaultmp.
*/
public double getDefaultmp() {
return _defaultmp;
}
/**
* @return Returns the defaultmpadd.
*/
public double getDefaultmpadd() {
return _defaultmpadd;
}
/**
* @return Returns the defaultmpbonus.
*/
public double getDefaultmpbonus() {
return _defaultmpbonus;
}
/**
* @param classid The classid to set.
*/
public void setClassid(int classid) {
_classid = classid;
}
/**
* @param defaulthp The defaulthp to set.
*/
public void setDefaulthp(double defaulthp) {
_defaulthp = defaulthp;
}
/**
* @param defaulthpadd The defaulthpadd to set.
*/
public void setDefaulthpadd(double defaulthpadd) {
_defaulthpadd = defaulthpadd;
}
/**
* @param defaulthpbonus The defaulthpbonus to set.
*/
public void setDefaulthpbonus(double defaulthpbonus) {
_defaulthpbonus = defaulthpbonus;
}
/**
* @param defaultmp The defaultmp to set.
*/
public void setDefaultmp(double defaultmp) {
_defaultmp = defaultmp;
}
/**
* @param defaultmpadd The defaultmpadd to set.
*/
public void setDefaultmpadd(double defaultmpadd) {
_defaultmpadd = defaultmpadd;
}
/**
* @param defaultmpbonus The defaultmpbonus to set.
*/
public void setDefaultmpbonus(double defaultmpbonus) {
_defaultmpbonus = defaultmpbonus;
}
}
----
okay, det den gjorde (denne her om ikke andet), var at hente alle linier ind fra en fil, og så gemme den i memory, så kunne man super hurtig hente noget fra memory med
LvlupData data = new L2LvlupData.getTemplate(id)
så kunne man få adgang til at guffet deri med (f.eks)
double hp = data.getDefaulthp();
ville have feltet hp, fra filen, taget fra ID (uniq) sted.
MEN, hvordan kan man gøre noget ligende i visual c++ 6 ?
jeg har prøvet lidt forskelligt og søgt på nettet, men det bedste svar jeg kunne finde var..
det kan man ikke bare lige sådan (nemt som java), man skulle selv til at skrive hashmap's og array definationer osv osv, lød som om man næsten skulle skrive hele windows om på dem.
er der ikke en "easy" metode til at gøre det ?
jeg skal bruge det til en winsock application jeg er ved at lave, den skal så have
socket (den brugeren er på, som den unique id)
key1 (encrypt key)
key2 (encrypt key)
key3 (encrypt key)
key4 (encrypt key)
ip (clienten)
username (clienten)
nogen ide'er ?